Nello spazio 3-D ho un insieme non ordinato di, diciamo, 6 punti; qualcosa di simile:Ordinare una serie di punti 3D in senso orario/antiorario.
(A)*
(C)*
(E)*
(F)*
(B)*
(D)*
I punti formano un contorno 3-D ma sono non ordinati. Per non ordinata voglio dire che sono memorizzati in un
unorderedList = [A - B - C - D - E - F]
Voglio solo di riorganizzare questa lista a partire da una posizione arbitraria (diciamo punto A) e attraversa i punti in senso orario o antiorario. Qualcosa di simile a questo:
orderedList = [A - E - B - D - F - C]
o
orderedList = [A - C - F - D - B - E]
Sto cercando di implementare un algoritmo più semplice possibile, dal momento che l'insieme dei punti di menzione corrisponde ad un quartiere di N-ring di ogni vertice su una maglia di ~ 420000 punti, e devo farlo per ogni punto della maglia.
Qualche tempo fa c'era un similar discussion per quanto riguarda i punti in 2-D, ma per ora non è chiaro per me come passare da questo approccio al mio scenario 3D.
Tutto bene tranne per 'punti atan2', nel piano si deve solo confrontare con prodotto vettoriale. – unkulunkulu
Non c'è niente di sbagliato nell'usare 'atan2'. Tuttavia, il suggerimento di unkulunkulu è interessante! Normalmente '(P1 x P2) · Z' ti darebbe un ordine incoerente, ma se lo combini con la corretta tecnica di ordinamento come quicksort o un ordinamento basato su pivot, funzionerà. Questo perché il prodotto incrociato su un cerchio dice "è più veloce arrivare là andando in senso orario o antiorario?" * Altri algoritmi di ordinamento potrebbero fallire. * Altrimenti usare il cross-product è difficile; per esempio se provi a ordinare per '(X x P2) · Z',' sin' non è invertibile nell'intervallo 0deg-180deg! Anche uno deve stare attento alla normalizzazione come al solito. – ninjagecko
ninjagecko, penso che l'approccio che hai suggerito (proiettando x, y, z punti sul piano più adatto) sembra adeguato nel mio caso. Tuttavia, sto pensando a un problema ipotetico: diciamo che il mio piano più adatto è z = 0 (normale: 0,0,1) e che due dei miei punti da proiettare condividono le stesse coordinate xey (solo che differiscono sulla coordinata z). In questo caso la proiezione da 3-D a 2-D avrà l'aspetto di un solo punto! Ho ragione? Mi sto perdendo qualcosa? In questo caso, come superare questo problema? – CodificandoBits