Determinar coordenadas de puntos en 3D
-
08-07-2019 - |
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
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)