PDA

Voir la version complète : Besoin de confirmation, équation d'un plan


deathangel
13/09/2005, 15h36
si j'ai 3 points de l'espace
p1 (a, b, c)
p2 (d, e, f)
p3 (g, h, i)

la formule du plan passant par ces 3 points, est-elle bien :
x ( bf + ei + hc - fh - ib - ce )
- y ( af + di + gc - fg - ia - cd )
z ( ae + dh + gb - eg - ha - bd )
- 1 ( aei + dhc + gbf - ceg - fha - ibd ) = 0

???

en fait, j'en ai besoin, car je possède un terrain en 3D sur lequel je dois projeter des routes (en 2D pour le moment)

pour chaque vertex composant la route je recherche donc la face du terrain correspondante, et je calcule donc la hauteur à appliquer à mon vertex de la route à partir de l'équation du plan passant par les 3 points composant une face de mon terrain


merci d'avance

Loulou
13/09/2005, 15h46
Avec le résultat final sous forme de successions de + et de -, ce n'est pas évident. Voici la formule, à toi de voir si ça colle bien avec ton résultat :

Soit N = (P1 - P2) ^ (P1 - P3) (produit vectoriel)
Normaliser N (N est la normale à ton plan)
Soit D = P1 . N (produit scalaire) (D estla distance entre ton plan et l'origine)

Alors l'équation de ton plan est la suivante :

A.x + B.y + C.z + D = 0
Avec A = Nx, B = Ny, C = Nz (les composantes de la normale)

Laeti²x
13/09/2005, 17h48
le vecteur normal du plan est

N = (p1-p2) ^ (p3-p2);
(produit vectoriel de deux vecteurs du plan)

a partir de la pour projeter un point sur le plan

distance = (N . p1) - (N . point a projeter);
(distance entre un point du plan et le point a projeter en suivant le vecteur normal au plan = plus courte distance du point au plan)

point projete = N.normalized() * distance + point a projeter;
(on ajoute la distance a parcourir pour atteindre le point projete a partir du point a projeter)

(j'ai choisi n'importe comment p1, p2 et p3, "." pour dot et "^" pour cross)

je delire peut etre...

Laeti²x
14/09/2005, 13h02
fo normaliser _clairement_ en fait... desol'... j'ai meme pas trouver le bouton "editer"... confute total.

N = (p1-p2) ^ (p3-p2);
N.normalize(); une bonne fois pour toutes
distance = (N . p1) - (N . point a projeter);
point projete = N * distance + point a projeter;

deathangel
14/09/2005, 13h07
c'est bon ca marche avec mon calcul en fait, j'ai essayé avec vos méthodes, mais c'était beaucoup plus lourd à implanter :s

merci pour les aides