Geometrie 3D?

Geometrie 3D? - Programmation

Marsh Posté le 15-12-2001 à 17:22:39    

Je recherches actuellement l'equation d'un triangle defini dans un espace a trois dimensions... :sweat:  Ou comment definir qu'un point quelconque appartient (ou non) a ce triangle.  
Si quelqu'un a ca en reserve  :??:


---------------
---I like Scsi---
Reply

Marsh Posté le 15-12-2001 à 17:22:39   

Reply

Marsh Posté le 15-12-2001 à 18:40:00    

il n'y a pas "d'équation" pour un triangle, plutôt une équation d'un plan (ax + by + cz + d = 0) avec un espace de définition (ie x appartient à [blah, blahblah]) ...  
 
* tu peux projeter le triangle 3d sur un plan 2d, et tester si la projection du point que tu veux tester appartient au triangle. c'est plus simple en 2d, et je crois qu'il faut faire ça pour les trois plans (projeter sur xoz, yoz, xoy)
 
* autre méthode : tu peux peut-être t'en sortir avec les coordonnées barycentriques. soit p1, p2, p3 les coords de ton triangle, p le point quelconque, si tu as ap1 + bp2 + cp3 = p avec a, b, c entre 0 et 1, ton point appartient au triangle.
 
* autre méthode encore : 'extruder' le triangle de manière à 'générer' trois plans, comme un prisme. soit p1, p2, p3 les coords de ton triangle, n sa normale, les trois plans sont définis par les couples de vecteurs (p1p2, p1pn), (p2p3, p2pn), (p3p1, p3pn). tu calcules les équations de ces trois plans, et tu balances les coordonnées de p dedans -> si pour chaque plan, ax + by + cz + d donne un nombre de même signe, le point appartient au triangle.
 
voilà ... ça te donne au moins qq pistes pour commencer. tu peux également jeter un coup d'oeil à la faq de comp.graphics.algorithms, dispo ici : http://www.faqs.org/faqs/graphics/algorithms-faq/ .

Reply

Marsh Posté le 15-12-2001 à 18:58:41    

Cool je cherchais une piste de reflexion et on m'en file trois, c'est la fete  :benetton:  
Les barycentres j'y avait pas pense mais je sens que ca va peut etre etre une solution bien classe. Merci !! :jap:


---------------
---I like Scsi---
Reply

Marsh Posté le 15-12-2001 à 18:58:52    

oups :D j'ai oublié un truc ... la dernière méthode te dira si le point appartient au prisme. il faut rajouter un test qui teste si le point p appartient au plan du triangle.
 
edit : oups bis :D :D pour les barycentres, a + b + c = 1 ...

 

[edtdd]--Message édité par youdontcare--[/edtdd]

Reply

Marsh Posté le 15-12-2001 à 20:45:17    

Sinon y'a aussi le produit mixte !!!
 
En gros tu as trois point A,B et C et donc ton point m.
 
Le produit mixte te permet de savoir de quel côté d'une droite se trouve un point. Bon un exemple parce que ce n'est pas clair !!!  
 
Tu veux savoir si ton point se trouve dans le triangle a,b,c donc il faut pour chaque segment ab, bc et ca que tu determine si ton point est à l'interieur du triangle ou non.  
 
Donc par exemple pour le segment ab tu fais le produit mixte avec comme parametre a,b et c et avec a,b, et m (ton point). Ensuite tu compares les resultats des deux produits mixtes et s'ils sont de même signe, le point mse trouve du même côté du segment que le point c, si le signes des deux produits mixte est different, ton point se trouve de l'autre côté du segment ab par rapport au point c et dans ce cas il n'est pas dans le triangle.
 
Donc si pour chaque segment ton point n'est pas à l'exterieur du triangle il est dedans (attention c'est en 2 !!!).
 
Pour la 3d, la même methode marche mais avec un tétraèdre et donc il faut faire le test avec les 4 faces du tetraedre et utilisé le point n'appartenant pas à la face comme référence.
 
Le seul truc c'est que je ne me souvient plus de la formule du produit mixte mais je crois que c'est le determinant d'une matrice carrée mais j'ai un doute sur le remplissage de la matrice en fonction des résultats.


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
Reply

Marsh Posté le 16-12-2001 à 14:07:42    

Merci à vous. :sol:  
précieux tout ca... :jap:  :jap:  :jap:


---------------
---I like Scsi---
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed