2013-01-17 18 views
9

Mam listę punktów 3D. Wiem, że wszystkie są koplanarne. Mam centrum, które chcę uporządkować i normalne do płaszczyzny, na której leżą punkty i centrum. Jak mogę sprawdzić, czy jeden punkt jest właściwy (lub pozostawiony) innego punktu?Sortowanie listy 3d współpłaszczyznowych punktów zgodnie z ruchem wskazówek zegara lub przeciwnie do ruchu wskazówek zegara

Rozumiem, jak to zrobić w 2D. Sort points in clockwise order? wyjaśnia, jak porównać punkty 2d. Więc myślę, że muszę jakoś zakodować wszystkie punkty i centrum na lokalne współrzędne 2d. Jak mogę to zrobić? Czy jest to najbardziej efektywny sposób rozwiązania tego problemu?

//from link: 
// a and b are points 
//center is the center around which to determine order 
//int num = (a.x-center.x) * (b.y-center.y) - (b.x - center.x) * (a.y - center.y); 
//if num=0 then they're on the same line 
//if num <0 or num>0 then a is to the left or right of b 

Jak to zaadaptować, aby obsługiwać punkty coplanar 3D?

+0

"Zgodnie z ruchem wskazówek zegara" nie ma znaczenia w 3-d, ponieważ zależy od tego, w jaki sposób patrzysz na płaszczyznę. Odwróć płaszczyznę i nagle zgodnie z ruchem wskazówek zegara przeciwnie do ruchu wskazówek zegara. –

+0

@woodchips Problem nie jest unikalny dla 3-d. Nie wszystkie układy współrzędnych 2-d są zdefiniowane w ten sam sposób. W obu przypadkach wystarczy określić, co rozumie się przez "prawo". – DuckMaestro

+0

Widzę, co mówisz, że to dobrze wiedzieć. Czy sądzisz, że określenie normalnego kierunku płaszczyzny oczyściłoby to? Zgodnie z ruchem wskazówek zegara nie oznacza to teraz zbyt wiele dla mnie, ale nadal muszę zamówić punkty w pewnym spójnym kierunku. – AAB

Odpowiedz

14

Nie trzeba konwertować wszystkiego na 2D.

mieć centrum C oraz normalne n. W celu określenia, czy punkt B jest do ruchu wskazówek zegara lub w kierunku przeciwnym od punktu obliczyć kropki (n, krzyż ( - C, B - C)). Jeśli wynik jest dodatni, B jest przeciwnie do ruchu wskazówek zegara od A; jeśli jest ujemny, B jest zgodny z ruchem wskazówek zegara z A.