Salut, j'essaye de calculer le signe de l'angle entre 2 vecteurs en 3D mais je rencontre quelques difficultés.
Voici une image qui montre ce que je veux faire :
Je voudrais le signe des 2 angles. (l'un est négatif, l'autre est positif)
J'ai essayer cet algorithme mais ça ne fonctionne pas, mes 2 angles sont de même signe :
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 float Vec3f::getAngleBetween (const Vec3f &other) { if(isNulVector() || other.isNulVector()) return 0; float dotProduct = dot(other); Vec3f n3 = normalize().cross(other.normalize()); Vec3f n1 = normalize(); Vec3f n2 = other.normalize(); Matrix4f matrix (n1.x, n1.y, n1.z, 0, n2.x, n2.y, n2.z, 0, n3.x, n3.y, n3.z, 0, 0, 0, 0, 1); float fDet = matrix.getDet(); if (fDet >= 0) return Math::acosinus(dotProduct); else return -Math::acosinus(dotProduct); }
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Vec3f v1(-50, 33.3333, 0); Vec3f v2(50, 33.3333, 0); Vec3f v3 (0, 33.3333, 0); std::cout<<v.getAngleBetween(v1)<<" "<<v.getAngleBetween(v2)<<std::endl;
Voilà donc si quelqu'un pourrait m'aider ça serait sympa.
Partager