J'essaie de prendre un tableau de points 3D et un plan et de diviser les points en 2 tableaux basés sur le côté du plan sur lequel ils se trouvent. Avant d’entamer le débogage, je voulais publier ce que je prévois de faire pour que ma compréhension de la procédure fonctionne.
En gros, j'ai l'avion avec 3 points et j'utilise (pseudo code):
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);
Je prends le produit croisé de ces deux vecteurs pour obtenir le vecteur normal.
Ensuite, je boucle sur mon tableau de points et les transforme en vecteurs et calcule le produit scalaire par rapport à la normale.
Ensuite, j'utilise le produit scalaire pour déterminer le côté sur lequel le point est placé.
Cela semble-t-il fonctionner?
Soit a*x+b*y+c*z+d=0
l'équation qui détermine votre avion.
Substituez les coordonnées [x,y,z]
d'un point dans le côté gauche de l'équation (je veux dire le a*x+b*y+c*z+d
) et regardez le signe du résultat.
Les points ayant le même signe sont du même côté de l'avion.
Honnêtement, je n'ai pas examiné les détails de ce que vous avez écrit. Je suppose que vous êtes d'accord pour dire que ce que je propose est plus simple.
Votre approche semble bonne. Cependant, lorsque vous dites "et les transformer en vecteurs", cela pourrait ne pas être bon (selon le sens de votre phrase).
Vous devriez "transformer vos points en vecteur" en calculant la différence en termes de coordonnées entre le point actuel et l'un des points du plan (par exemple, l'un des 3 points définissant le plan). Comme vous l'avez écrit, il semble que vous ayez mal compris cela; mais à part ça, ça va!