Пусть линия go из точки l0
в точку l1
. Тогда пусть центр тяжести будет точкой p1
. Пусть вектор l
будет вектором от l0
до l1
и p
от l0
до p1
. Затем вы можете найти расстояние от точки p1
до линии, используя точечное произведение, как описано здесь .
Возможно, вы хотите найти расстояние от вашей точки до отрезка , а затем оценить, находится ли точка на отрезке, на основе этого расстояния. Это можно сделать аналогичным образом, но с большим количеством логик c, как описано здесь .
Реализация в python с использованием numpy
приведена ниже. Его можно легко расширить для обработки N
центроидов, что позволяет вам параллельно отслеживать различные объекты. Он работает, проецируя точку на отрезок и находя расстояние от этой точки до центроида.
import numpy as np
def distance_from_line_segment_points_to_point(l0, l1, p1):
l0 = np.array(l0)
l1 = np.array(l1)
p1 = np.array(p1)
l_vec = l1 - l0
p_vec = p1 - l0
if (l0 == l1).all():
return np.linalg.norm(p_vec)
l_norm = np.linalg.norm(l_vec)
l_unit = l_vec / l_norm
t = np.dot(l_unit, p_vec)
if t >= l_norm:
p_proj = l1
elif t <= 0:
p_proj = l0
else:
p_proj = l0 + t * l_unit
return np.linalg.norm(p1 - p_proj)
print(distance_from_line_segment_points_to_point([0, 0], [0, 0], [1, 1])) # sqrt(2), 1.4
print(distance_from_line_segment_points_to_point([0, 0], [1, 0], [1, 1])) # 1
print(distance_from_line_segment_points_to_point([0, 0], [1, 1], [0, 1])) # sqrt(2)/2, 0.707