Определение координат точки В 3D
-
08-07-2019 - |
Вопрос
У меня есть линия, существующая в 3d, которая находится между двумя известными точками:{X1, Y1, Z1} и {X2, Y2, Z2}.
Я также знаю, что нахожусь на определенном расстоянии от одной из точек:D
Как я могу определить, каковы координаты точки, в которой я нахожусь после перемещения D из {X1, Y1, Z1}?
Спасибо
Решение
Предполагая, что вы хотите переместить расстояние D из точки 1 в точку 2 :
P1 = [ X1, Y1, Z1 ]
P2 = [ X2, Y2, Z2 ]
Линейный вектор может быть описан как :
V = P2 - P1 = [ Xv = X2 - X1, Yv = Y2 - Y1, Zv = Z2 - Z1 ]
Длина линии может быть определена как :
VL = SQRT(Xv^2 + Yv^2 + Zv^2) // ^2 = squared
Версор линии, он же единичный вектор, может быть определен как :
v = V / VL = [Xv / VL, Yv / VL, Zv / VL]
Целевая точка PD может быть определена как :
Pd = P1 + D * v // Starting from P1 advance D times v
Пожалуйста, обратите внимание, что P1 и v являются векторами, а D - скаляром
Другие советы
Сначала определите длину отрезка линии:
d=sqrt((X1-X2)^2+(Y1-Y2)^2+(Z1-Z2)^2))
Вы перемещаете D от P1= (X1, Y1, Z1) к P2=(X2,Y2, Z2).Это ставит вас в точку (X3, Y3, Z3):
{XYZ}3={XYZ}1+(D/d)*({XYZ}2-{XYZ}1})
Где вы расширяете это в 3 уравнения, по одному для каждого из X, Y и Z.
Это работает, потому что вы находитесь на D / d пути между P1 и P2.Проверить:Скажем, D= d.Тогда вы должны быть точно на уровне P2.
Возьмите вектор между двумя точками
<X2-X1, Y2-Y1, Z2-Z1>
Превратите это в единичный вектор, указывающий в том же направлении, но с длиной 1.Вы делаете это путем деления на расстояние между двумя точками:
<X2-X1, Y2-Y1, Z2-Z1>
---------------------------------------
sqrt((X2-X1)^2 + (Y2-Y1)^2 + (Z2-Z1)^2)
Затем умножьте это на D и добавьте к вашей исходной точке, чтобы получить новую точку.
<X2-X1, Y2-Y1, Z2-Z1>
(X1, Y1, Z1) + D * ---------------------------------------
sqrt((X2-X1)^2 + (Y2-Y1)^2 + (Z2-Z1)^2)
Это задача линейной комбинации:
dist = расстояние (p1, p2)
задано расстояние D
f = D / dist (дробная координата точки D в пределах LineSeg (p1, p2)
pD = LinearCombo (1-f, p1, f, p2) (координаты точки на расстоянии D от p1)