Найти ближайшую точку на отрезке - PullRequest
2 голосов
/ 21 апреля 2020

Я пытаюсь найти в Javascript способ получить координаты ближайшей точки на сегменте из 3 сведений: конечные точки сегмента, скажем, A = [x1, y1] и B = [x2, y2], и a точка C = [x, y].

enter image description here

Как это сделать?

Ответы [ 2 ]

3 голосов
/ 21 апреля 2020

Создание векторов

AB = (B.X-A.X, B.Y-A.Y)
AC = (C.X-A.X, C.Y-A.Y)

Затем вычислите ортогональную проекцию C на AB линию:

AD = AB * (AB.dot.AC) / (AB.dot.AB);

В координатах:

CF = ((B.X-A.X)*(C.X-A.X)+(B.Y-A.Y)*(C.Y-A.Y)) / ((B.X-A.X)^2+(B.Y-A.Y)^2)
D.X=A.X+(B.X-A.X)*CF
D.Y=A.Y+(B.Y-A.Y)*CF

Примечание что для случаев CF<0 или CF>1 точка проекции D лежит вне сегмента AB, поэтому ближайший точечный сегмент равен A или B соответственно

2 голосов
/ 21 апреля 2020

Вам понадобятся знания https://en.wikipedia.org/wiki/Analytic_geometry

Это позволит вам получить несколько уравнений, которые вам нужно будет решить, чтобы получить эту точку. Это продвинутая математика средней школы.

В вашем случае вам нужно создать уравнение прямой из двух точек https://mathinsight.org/lines_algebraic_geometry_refresher

Затем вам нужно посчитать вектор, который имеет прямой угол к предыдущей линии https://www.mathsisfun.com/algebra/vectors-dot-product.html (а затем найдите уравнение для линии, которая проходит через точку C и имеет направление вашего вектора)

И тогда вам нужно найти пересечение этих двух линий https://brilliant.org/wiki/linear-equations-intersection-of-lines/

...