У меня есть отрезок линии с началом s (x1, y1) и end e (x2, y2). Я вычислил расстояние между s и e, используя эвклидовое расстояние d = sqrt ((x1-x2) (x1-x2) + (y1-y2) (y1-y2)) Как найти точку на линии сегмент на расстоянии d1 (0 < d1 < d)?Как сделать линейную интерполяцию?
0
A
ответ
0
Основная тема линейности заключается в том, что все пропорционально.
d1
является d1/d
доля пути от 0
до d
.
Таким образом, точка, p
, что вы ищете одно и то же доля пути от s
к e
. Так давайте r = d1/d
. Тогда
p = (x1 + r*(x2-x1), y1 + r*(y2-y1))
Обратите внимание, что при r
равен 0, p
является (x1 + 0*(x2-x1), y1 + 0*(y2-y1)) = (x1, y1) = s
. И когда r
равно 1, p
- e = (x2, y2)
. Так как r
идет от 0
до 1
, p
идет от s
до t
линейно - то есть, как линейная функция от r
.
0
параметрическая линия определяется следующим образом:
x(t)=x1+(x2-x1)*t;
y(t)=y1+(y2-y1)*t;
- где
t
является параметром в диапазоне<0.0,1.0>
- , если
t=0.0
то результат дает точку (x1, y1) - , если
t=1.0
то результат дает точку (x2, y2)
Так что, если вам нужно точку на расстоянии г от начала, то:
D=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
x(d)=x1+(x2-x1)*d/D;
y(d)=y1+(y2-y1)*d/D;
- где
D
является длина линии - и
d
является расстояние от начальной точки