2017-07-20 1 views
0

J'ai donc ce problème: J'écris un programme où vous pouvez cliquer sur un point de l'écran avec un objet 3D projeté et le sommet de Le maillage triangle qui est visuellement (en 2D) le plus proche de ce point sera sélectionné. J'ai calculé les coordonnées du barycentre de l'intersection avec un triangle. Comment puis-je utiliser ces coordonnées barycentriques pour calculer le sommet le plus proche? Merci pour l'aideSommet d'un triangle 3D le plus proche d'un point donné paramètre d'intersection barycentrique

Répondre

0

Pour coordonnées barycentriques (u,v,w) et longueur du côté triangle a,b,c distance au carré à A, B, sommets C sont

dA^2 = -(a^2*v*w + b^2*w*(u-1) + c^2*v*(u-1)) = 
     -(a^2*v*w+b^2*w*u+c^2*v*u - b^2*w - c^2*v) = 

     b^2*w + c^2*v - Const (TheSameConstantForAllVertices) 

dB^2 = -(a^2*(v-1)*w + b^2*w*u + c^2*(v-1)*u) = 

     a^2*w + c^2*u - Const 

dC^2 = -(a^2*v*(w-1) + b^2*(w-1)*u + c^2*v*u) 

     a^2*v + b^2*u - Const 

(more formulas here), de sorte que vous pouvez comparer les distances au carré et choisir le plus petit. J'ai séparé l'expression plus simple pour la comparaison.

Peut-être avez-vous besoin d'approximation pour des triangles plutôt bons (proches de l'équilatéral). Dans ce cas, choisissez la plus grande valeur du triplet barycentrique. Cela correspond grosso modo au sommet le plus proche.

+0

Pourriez-vous également écrire les formules pour les autres sommets? Est-ce correct? Distance à B: d^2 = - (a^2 * (v-1) * w + b^2 * w * u + c^2 * (v-1) * u) Distance à C: d^2 = - (a^2 * v * (w-1) + b^2 * (w-1) * u + c^2 * v * u) – mathew7k5b

+0

Oui, c'est correct. J'ai ajouté des formules dans le message et une expression simple pour la comparaison – MBo