Bonjour
Je fais une petite appli GL, mais ma question n'est pas vraiment sur GL..
En fait j'ai une facette représentée par 3 points et un point appartenant au olan de la facette... Comment savoir si le point est à l'interieur de la facette ???
Bonjour
Je fais une petite appli GL, mais ma question n'est pas vraiment sur GL..
En fait j'ai une facette représentée par 3 points et un point appartenant au olan de la facette... Comment savoir si le point est à l'interieur de la facette ???
Salut,
Si je me souviens bien : tu as 3 points ABC et un point X dans le même plan. Je crois que X est à l'intérieur du triangle ABC si :
AX.AB > 0 et
BX.BC > 0 et
CX.CA > 0
Essaye de voir si ça marche , sinon je reverrais ma formule
ouép ca a l'air de marcher thx
c bizare quand meme
Mon truc me donne des résultats un peu cheloud avec cette forumle
Es tu bien sur que c'est la bonne??
C peut être moi mais je voudrais être sur avant
ba non quand même pas, ca doit être autre chose
En fait j'ai deux plan (leurs équations)
et une ribembelle de facettes.... Je determine alors pour chaque facette l'équation de plan qui lui correspond...
Avec ces 3 plans, je determine alors un point d'intersection, et je voudrais savoir si le pt est dans le triangle...
J'ai des résultat légèrement abérant, mais apparament le calcul d'intersection semble correct.....donc je ne sais pas trop d'où ca vient
J'ai peut être repondu un peu vite puisque je viens de trouver un cas ou ma formule ne marche pas, dsl. J'y reflechis
ok ca marche moi j'ai trouvé ca
c clair c pas bête
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 inline bool VertexInTriangle(vec3 vtxPoint, vec3 vtx0, vec3 vtx1, vec3 vtx2) { double dAngle; vec3 vec0 = Normalize( vtxPoint - vtx0 ); vec3 vec1 = Normalize( vtxPoint - vtx1 ); vec3 vec2 = Normalize( vtxPoint - vtx2 ); dAngle = acos( DotProduct(vec0,vec1) ) + acos( DotProduct(vec1,vec2) ) + acos( DotProduct(vec2,vec0) ) ; if( fabs( dAngle - 2 * PI ) < 0.001 ) return true; else return false; }
C'est pas bête mais je pense que c'est pas bon, moi je ferais :
Mais je me trompe peut-être, tiens moi au courant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 inline bool VertexInTriangle(vec3 vtxPoint, vec3 vtx0, vec3 vtx1, vec3 vtx2) { double dAngle; vec3 vec0 = Normalize( vtxPoint - vtx0 ); vec3 vec1 = Normalize( vtxPoint - vtx1 ); vec3 vec2 = Normalize( vtxPoint - vtx2 ); if( acos( DotProduct(vec0,vec1) ) > PI || acos( DotProduct(vec1,vec2) ) > PI || acos( DotProduct(vec2,vec0) ) > PI) return false; else return true; }
ca me soul j'ai des putain de DOMAIN ERROR avec le acos mais le calcul du produit scalaire est bon (bien entre -1 et 1)
oh c bon tout marche
thanks sphax pour les réponses
note : avec le truc que j'ai trouvé ca marche mais pas avec ta formule
By
Regarde ici
http://www.developpez.net/forums/vie...light=triangle
Notamment le dernier post de Delphi-Fan
Avec les arcos c'est trop lourd et laid.
Le mieux, c'est avec les barycentres : c'est rapide clair et net
et comment ??
Maintenant j'ai quelques chose qui fonctionne et la vitesse de calcul me convient largement..Mais bon si tu as mieux je suis preneur
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager