Вопрос

У меня есть линия, существующая в 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)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top