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 Comment trouver l'intersection perpendiculaire du point (X4, Y4, Z4) sur la ligne de (x3, Y3, Z3)? P> (x1, y1, z1) code> &
(x2, y2, z2) code> et j'ai un point
(x3, y3, z3 ) code> dans l'espace. P>
4 Réponses :
Vous demandez, dans la pratique, le calcul d'une distance entre le point et la ligne, donc la longueur code> du vecteur à partir du
(x3, y3, z3) code > 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 code>. (Ceci est juste pour vous donner un indice). P>
Votre lien semble être brisé
Pour commencer, vous avez assez bien besoin d'une certaine mise en œuvre d'un
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
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 à
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 !! Vector3 code>, 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
vecteur3.Multiphe code> au lieu de
vecteur.scale code>: msdn.microsoft.com/en-us/library/bb198114.aspx
point code> doit être
q - w2 code> et non
q + w2 code>.
Nous devons trouver le point D dans la ligne AB qui est perpendiculaire au point C p> Nous avons maintenant des vecteurs directionnels p> A - (x1, y1, z1), B - (x2, y2, z3), c - (x3, y3, z3) code> p>
D = (A + (VectorAB * Distance between A and D)).
J'ai fait le calcul de la réponse marquée comme meilleure réponse:
Laisser Alpha = [(x3-x1) (x2-x1) + (y3-y1) em> (Y2-y1) + (z3-z1) (z2-z1)] / [( x2-x1) em> (x2-x1) + (Y2-y1) (y2-y1) + (z2-z1) em> (z2-z1)]
point d'intersection = (x1 + alpha * (x2-x1), Y1 + alpha * (Y2-Y1), Z1 + alpha * (Z2-Z1)). P>