Определить координаты точки в 3D - PullRequest
0 голосов
/ 17 сентября 2009

У меня есть линия, которая существует в 3d, между двумя известными точками: {X1, Y1, Z1} и {X2, Y2, Z2}.

Я также знаю, что я на определенном расстоянии от одной из точек: D

Как определить координаты точки, в которой я нахожусь после перемещения D из {X1, Y1, Z1}?

Спасибо

Ответы [ 4 ]

3 голосов
/ 17 сентября 2009

Предполагая, что вы хотите переместить расстояние 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 - скаляр

1 голос
/ 17 сентября 2009

Сначала определите длину отрезка:

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.

0 голосов
/ 17 апреля 2016

Это проблема линейной комбинации:

dist = расстояние (p1, p2)

дано расстояние D

f = D / dist (дробная координата точки D в пределах LineSeg (p1, p2)

pD = LinearCombo (1-f, p1, f, p2) (координаты расстояния точки D от p1)

0 голосов
/ 17 сентября 2009

Взять вектор между двумя точками

<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)
...