11
votes

Point perpendiculaire 3D sur la ligne de point 3D

Cette question a été posée avant la référence à 2D. Cette question l'étend à 3D. Comment puis-je trouver le point intersecté perpendiculaire sur une ligne d'un point dans l'espace 3D?. Si ma ligne est définie par points (x1, y1, z1) & (x2, y2, z2) et j'ai un point (x3, y3, z3 ) dans l'espace.

Comment trouver l'intersection perpendiculaire du point (X4, Y4, Z4) sur la ligne de (x3, Y3, Z3)?


0 commentaires

4 Réponses :


2
votes

Vous demandez, dans la pratique, le calcul d'une distance entre le point et la ligne, donc la longueur du vecteur à partir du (x3, y3, z3) Pointez sur la ligne orthogonale au vecteur. Si nous immangeons la ligne comme un vecteur, cela signifie que produit-produit des deux vecteurs est égal à 0 . (Ceci est juste pour vous donner un indice).


1 commentaires

Votre lien semble être brisé



11
votes

Pour commencer, vous avez assez bien besoin d'une certaine mise en œuvre d'un Vector3 , si vous écrivez votre propre, trouver une application autonome sur la part d'Internet, ou utiliser une bibliothèque qui contient un comme XNA ou 8 commentaires

Cela peut sembler stupide, mais je ne peux pas localiser la méthode Vecteur3.Scale dans l'espace de noms XNA. Y a-t-il un autre espace de noms dans Xna? J'utilise microsoft.xna.framework. Je vois un vecteur3.scale dans l'espace de noms DirectX, mais je n'ai trouvé aucun endroit de télécharger cette assemblée. Besoin d'une certaine direction?


Xna vector3 utilise vecteur3.Multiphe au lieu de vecteur.scale : msdn.microsoft.com/en-us/library/bb198114.aspx


Beaucoup, beaucoup de mybads que je pensais que cela travaillait à 2h00 la nuit dernière mais maintenant, lorsque je vérifie les points, j'ai une mauvaise réponse. À titre d'exemple: j'ai des points A: (666.401, -8.421.151.687), B: (666.401, -86.459.154.459), C: (1047, -26.98888,133.248) La ligne est la suivante: ab et point est c- Les Ans que je reçois, c'est: D: (380.60, -33.49, -17.20). Devrait être allongé sur x axe qui est 666.401?


Je viens de tester mon propre code avec les points que vous avez fournis, il ressemble à point doit être q - w2 et non q + w2 .


Je reçois D: (1713, -20.49,283.69) Si AB est la ligne, DX devrait être 666.401? Je suppose que vous êtes astucieux est: U.Longhongth -sturéed ()?


Ouais, désolé pour ça. Je viens de réaliser que je n'ai pas changé l'exemple de code pour soustraire W2 de Q, assurez-vous que vous faites cela. Autre que cela est difficile de dire ce qui ne va pas. Je teste cela avec la mise en œuvre Vector3 d'Opentk et j'ai reçu une réponse appropriée (666.401, -26.31045, 152.3224), peut-être que les paramètres d'une méthode sont retournés quelque part dans la mise en œuvre XNA.


J'ai essayé les deux sens avec W2 & Q et j'ai eu de mauvaises réponses. On dirait que votre réponse est correcte. Je suppose que j'ai alors des vecteurs dans le mauvais ordre de Xna. Je vais essayer d'obtenir tk. Merci pour votre patience.


Okey doey-- j'ai revérifié et j'ai constaté que dans des ordres différents que j'avais inversé un vecteur. Pour toute personne pouvant survenir à cet article, ce qui précède semble correct et est assez simple à programmer. Fonctionne à la fois sur Xna et TK, comme c'est le cas: Merci pour votre aide !!



2
votes

Nous pouvons également utiliser la méthode Triangle AAS.

A - (x1, y1, z1), B - (x2, y2, z3), c - (x3, y3, z3) code> p>

Nous devons trouver le point D dans la ligne AB qui est perpendiculaire au point C p>

Nous avons maintenant des vecteurs directionnels p>

 D = (A + (VectorAB * Distance between A and D)).


0 commentaires

0
votes

J'ai fait le calcul de la réponse marquée comme meilleure réponse:
Laisser Alpha = [(x3-x1) (x2-x1) + (y3-y1) (Y2-y1) + (z3-z1) (z2-z1)] / [( x2-x1) (x2-x1) + (Y2-y1) (y2-y1) + (z2-z1) (z2-z1)]
point d'intersection = (x1 + alpha * (x2-x1), Y1 + alpha * (Y2-Y1), Z1 + alpha * (Z2-Z1)).


0 commentaires