Ho bisogno di trovare il numero di punti in una lista data che si trovano all'interno di un triangolo. Il problema qui è che possono esserci fino a un milione di punti.Punti di conteggio all'interno di triangolo veloce
Ho provato un approccio semplice: se l'area del triangolo è uguale alla somma delle aree di 3 triangoli formati prendendo 2 dei punti del triangolo alla volta e il punto da controllare, è all'interno. Questo non ha errori di precisione, dal momento che non divido per due per trovare l'area.
Ma ho bisogno di qualcosa più veloce. L'obiettivo è la velocità. Può essere reso più veloce da una sorta di pre-elaborazione, ignorando alcuni punti in base ad alcuni criteri o qualcosa di simile?
MODIFICA: Hai dimenticato di aggiungere un dettaglio critico. I punti dati una volta, sono corretti. Quindi i punti sono statici e devono essere controllati per un massimo di un milione di triangoli ...
MODIFICA 2: Si scopre che un buon modo (forse troppo ottimale) per farlo era usare uno sweep di linea. Comunque grazie per le tue risposte!
L'approccio ovvio che viene in mente è quello di calcolare prima un riquadro di delimitazione e uno schermo in base alle sue coordinate. –
Se pubblichi la tua funzione di conteggio, potrebbero esserci altri trucchi di ottimizzazione che le persone possono fornire oltre l'algoritmo. –
Quali sono i tuoi limiti di tempo? Millisecondi? Secondi? Se è secondi, fai una ricerca lineare usando la risposta suggerita da Alexey Frunze. Se sono millisecondi o sub millisecondi, considera l'utilizzo di un albero di partizionamento dello spazio, ad esempio un albero quadrangolare. – JPvdMerwe