Edit: Oh guarda, Simplifying Polygons
Lei ha parlato di rilevamento delle collisioni. Potresti andare davvero semplice e calcolare attorno ad esso uno scafo convesso.
Se ti interessano le aree concave, puoi calcolare uno scafo concavo prendendo il centroide del poligono e scegliendo un punto da cui iniziare. Dal punto di partenza ruota intorno al centroide, trovando ogni vertice che vuoi mantenere e assegnandolo come il prossimo vertice nello scafo di delimitazione. La complessità dell'algoritmo verrebbe nel modo in cui hai determinato quali vertici mantenere, ma sono sicuro che ci hai già pensato. Puoi lanciare tutti i tuoi vertici in secchi in base alla loro posizione rispetto al centroide. Quando un bucket ottiene più di un numero arbitrario di vertici, puoi dividerlo. Quindi prendi la media dei vertici in quel secchio come il vertice da usare nello scafo delimitante. Oppure, dimentica i secchi, e quando ti muovi attorno al centroide, scegli solo un punto se è più di una distanza dall'ultimo punto.
In realtà, potresti probabilmente utilizzare tutti i vertici del poligono come "nuvola di punti" e calcolare lo scafo concavo attorno a quello. Cercherò un collegamento algoritmo. Il caso peggiore su questo sarebbe un poligono completamente convesso.
Un'altra alternativa è iniziare con un rettangolo di delimitazione. Per ogni vertice del rettangolo, trova la distanza dal punto al poligono. Per il vertice più lontano, dividerlo in altri due vertici e spostarli in alcuni. Ripeti fino a quando non viene soddisfatta una parte dei vertici o dell'area. Dovrei pensare un po 'di più ai dettagli di questo.
Se ci si preoccupa del poligono che sembra effettivamente simile, anche nel caso di un poligono autointersecante, è necessario un altro approccio, ma non sembra necessario poiché si è interrogato sul rilevamento delle collisioni.
Questo post ha alcuni dettagli sulla parte convessa dello scafo.
fonte
2009-03-04 23:37:47
Wow! Questo algoritmo è solo ROCCE! : D –