Pregunta

Tengo una línea que existe en 3d que se encuentra entre dos puntos conocidos: {X1, Y1, Z1} y {X2, Y2, Z2}.

También sé que estoy a cierta distancia para uno de los puntos: D

¿Cómo puedo determinar cuáles son las coordenadas del punto donde estoy después de mover D desde {X1, Y1, Z1}?

Gracias

¿Fue útil?

Solución

Suponiendo que desea mover la distancia D del punto 1 al punto 2:

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

El vector de línea se puede describir como:

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

La longitud de la línea se puede determinar como:

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

El versor de la línea, también conocido como el vector unitario, se puede determinar como:

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

El punto objetivo PD se puede determinar como:

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

Tenga en cuenta que P1 y v son vectores y D es un escalar

Otros consejos

Primero, determine la longitud del segmento de línea:

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

Estás moviendo D desde P1 = (X1, Y1, Z1) hacia P2 = (X2, Y2, Z2). Esto lo coloca en el punto (X3, Y3, Z3):

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

Donde expandes eso en 3 ecuaciones, una para cada una de X, Y y Z.

Esto funciona porque eres D / d del camino entre P1 y P2. Comprobación: diga D = d. Entonces deberías estar exactamente en P2.

Toma el vector entre los dos puntos

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

Convierta eso en un vector unitario que apunte en la misma dirección pero con longitud 1. Lo hace dividiendo por la distancia entre los dos puntos:

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

Luego multiplique eso por D y agréguelo a su punto original para obtener el nuevo punto.

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

Este es un problema de combinación lineal:

dist = distancia (p1, p2)

distancia D se da

f = D / dist (coordenada fraccional del punto D dentro de LineSeg (p1, p2)

pD = LinearCombo (1-f, p1, f, p2) (coordenadas de la distancia de punto D desde p1)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top