Question

Je voulais calculer l'angle entre deux triangles dans l'espace 3D. Les deux triangles toujours partager exactement deux points. par exemple.

Triangle 1:

Point1 (x1, y1, z1),  
Point2 (x2, y2, z2),   
Point3 (x3, y3, z3).  

Triangle 2:

Point1 (x1, y1, z1),  
Point2 (x2, y2, z2),  
Point4 (x4, y4, z4).

Est-il possible de calculer l'angle entre eux efficacement dans CUDA?

Était-ce utile?

La solution

Pour chaque plan, vous devez construire est un vecteur normal (perpendiculaire à toutes les lignes dans ce plan). Un moyen simple de faire cela est de prendre le produit croisé de deux lignes non parallèles dans le triangle. (Ex (P3-P1) X (P2-P1) et (P4-P1) X (P2-P1).

Normaliser les.

Le produit scalaire de ces deux vecteurs de direction vous donne le cosinus de l'angle.

Le bit est difficile à surveiller les triangles dégénérés! Si les 3 points définissant soit triangle sont colinéaires, (ce triangle est juste une ligne), alors ce que vous demandez est non défini, et la croix-produit diviser par zéro. Vous devez décider ce que vous allez faire dans ce cas.

Puisque vous essayez de le faire sur un GPU, vous aurez envie d'écrire idéalement cette fonction sans branches, si vous êtes préoccupé par l'efficacité. Cela voudrait dire au lieu de test pour les triangles dégénérés avec une clause if, vous devriez essayer de le faire avec un A ? B : C ternaire

Autres conseils

L'angle entre les triangles est le même que l'angle entre les plans définis par les trois points de chaque triangle.

Etant donné que les deux se trouvent le point 1 ou le point 2 dans les deux plans, comprendre les cosinus directeurs de l'un de ces points au point 3, et ensuite jusqu'au point 4. Ensuite, le cosinus de l'angle entre ces deux lignes se trouve la somme des produits de cosinus de direction correspondant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top