Question

J'ai une ligne en 3D qui se trouve entre deux points connus: {X1, Y1, Z1} et {X2, Y2, Z2}.

Je sais aussi que je suis à une certaine distance pour l’un des points: D

Comment puis-je déterminer les coordonnées du point où je me trouve après avoir déplacé D de {X1, Y1, Z1}?

Merci

Était-ce utile?

La solution

En supposant que vous vouliez déplacer la distance D du point 1 au point 2:

P1 = [ X1, Y1, Z1 ]
P2 = [ X2, Y2, Z2 ]

Le vecteur de ligne peut être décrit comme suit:

V = P2 - P1 = [ Xv = X2 - X1, Yv = Y2 - Y1, Zv = Z2 - Z1 ]

La longueur de la ligne peut être déterminée comme suit:

VL = SQRT(Xv^2 + Yv^2 + Zv^2)     // ^2 = squared

Le verseur de la ligne ou le vecteur d'unité peut être déterminé comme suit:

v = V / VL = [Xv / VL, Yv / VL, Zv / VL]

Le point cible PD peut être déterminé comme suit:

Pd = P1 + D * v // Starting from P1 advance D times v

Veuillez noter que P1 et v sont des vecteurs et que D est un scalaire

Autres conseils

Tout d'abord, déterminez la longueur du segment de ligne:

d=sqrt((X1-X2)^2+(Y1-Y2)^2+(Z1-Z2)^2))

Vous déplacez D de P1 = (X1, Y1, Z1) vers P2 = (X2, Y2, Z2). Cela vous met au point (X3, Y3, Z3):

{XYZ}3={XYZ}1+(D/d)*({XYZ}2-{XYZ}1})

Où vous développez cela en 3 équations, une pour chacun de X, Y et Z.

Cela fonctionne parce que vous êtes à mi-chemin entre P1 et P2. Vérifier: Dites D = d. Ensuite, vous devriez être exactement à P2.

Prenez le vecteur entre les deux points

<X2-X1, Y2-Y1, Z2-Z1>

Transformez cela en un vecteur unitaire pointant dans la même direction mais avec la longueur 1. Vous le faites en divisant par la distance entre les deux points:

         <X2-X1, Y2-Y1, Z2-Z1>
---------------------------------------
sqrt((X2-X1)^2 + (Y2-Y1)^2 + (Z2-Z1)^2)

Puis multipliez-le par D et ajoutez-le à votre point d'origine pour obtenir le nouveau point.

                            <X2-X1, Y2-Y1, Z2-Z1>
(X1, Y1, Z1) + D * ---------------------------------------
                   sqrt((X2-X1)^2 + (Y2-Y1)^2 + (Z2-Z1)^2)

Il s'agit d'un problème de combinaison linéaire:

dist = distance (p1, p2)

la distance D est donnée

f = D / dist (coordonnée fractionnaire du point D dans LineSeg (p1, p2)

pD = LinearCombo (1-f, p1, f, p2) (coordonnées de la distance ponctuelle D de p1)

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