2013-03-28 8 views
14

Próbuję wziąć tablicę punktów 3D i płaszczyzny i dzielą się na 2 punkty tablic na podstawie której stronie płaszczyzny są one na. Zanim przystąpię do debugowania, chciałem opublikować to, co zamierzam zrobić, aby upewnić się, że moje zrozumienie tego sposobu zadziała.sprawdzić, które z boku z punktów płaszczyzny są na

Zasadniczo mają powierzchnię z 3 punktów i przez stosowanie (pseudo-kod):

var v1 = new vector(plane.b.x-plane.a.x, plane.b.y-plane.a.y, plane.b.z-plane.a.z); 
var v2 = new vector(plane.c.x-plane.a.x, plane.c.y-plane.a.y, plane.c.z-plane.a.z); 

Biorę iloczyn z tych dwóch wektorów, aby otrzymać wektor normalny.

Następnie pętli moim tablicy punktów, a włączyć je do wektorów i obliczanie iloczynu skalarnego wobec normalnej.

potem użyć iloczynu skalarnego określić stronę, że punkt jest na.

Czy to brzmi, jakby to działało?

+0

To brzmi, jakby to działało. Zaznaczę jednak, że można "wektoryzować" z wewnętrznej pętli przez pomnożenie punktu 'plane.a' przez normalny wektor, aby uzyskać stałe przesunięcie. To eliminuje 2 subtrakcje i jest w zasadzie takie samo jak rozwiązanie @ Ali: jego 'd' to' - dot (plane_normal, plane.a) ' – comingstorm

Odpowiedz

17

Let a*x+b*y+c*z+d=0 być równanie określające swój samolot.

Podstawianie współrzędnych punktu [x,y,z] na lewą stronę równania (mam na myśli a*x+b*y+c*z+d) i patrzeć na znak wyniku.

Punkty posiadające ten sam znak są na tej samej stronie płaszczyzny.

Szczerze mówiąc, nie bada szczegóły tego, co napisałeś. Zgadzam się, zgadzasz się, że to, co proponuję, jest prostsze.

+1

Umieszczenie go w postaci' dot ((a, b, c, d), (x, y, z, 1))> 0' gdzie pozytywny produkt dot jest przed płaszczyzną, a ujemny za może być przydatny/szybszy. –

+2

@LucasW It * to * forma kropki: jeśli rozwiniesz 'dot ((a, b, c, d), (x, y, z, 1))' otrzymasz dokładnie 'a * x + b * y + c * z + d'. :) – Ali

+1

Czy mógłbyś wyjaśnić tę metodę w języku algebry liniowej. Co to znaczy, gdy produkt kropkowany jest dodatni lub ujemny? – Dagang

1

Twoje podejście brzmi dobrze. Jednak kiedy mówisz "i zamieniasz je w wektory", może to nie być dobre (w zależności od znaczenia twojego zdania).

Powinieneś "zamienić punkty w wektor", obliczając różnicę w zakresie współrzędnych między bieżącym punktem a jednym z punktów płaszczyzny (na przykład jeden z 3 punktów definiujących płaszczyznę). Kiedy to napisałeś, brzmi to tak, jakbyś źle to zrozumiał; ale poza tym jest ok!

Powiązane problemy