Как найти кратчайшее расстояние между точкой и отрезком линии в C#

В этом примере рассматривается сегмент как параметризованный вектор, где параметр t изменяется от 0 до 1. Он находит значение t, которое минимизирует расстояние от точки до линии.

Если t находится между 0.0 и 1.0, то точка на сегменте, ближайшем к другой точке, лежит на сегменте. В противном случае ближайшая точка является одной из конечных точек сегмента. Программа находит эту ближайшую точку и вычисляет расстояние между ней и целевой точкой.

Следующий код показывает, как программа находит расстояние между точкой pt и отрезком p1 - & gt; p2 .

Менее очевидной частью этого кода является следующая инструкция.

Итак, откуда эта формула?

Чтобы найти кратчайшее расстояние между этой точкой и сегментом линии, вам нужно знать некоторые относительно простые исчисления и один умный факт. Умный факт состоит в том, что если T минимизирует уравнение, то T 2 минимизирует квадрат уравнения. В этом примере это означает, что мы можем минимизировать расстояние между точками и отрезком линии, а затем найденное нами значение t также минимизирует неквадратное расстояние.

Точка на отрезке линии имеет координаты X = Pt1.X + t * dx, Y = Pt1.Y + t * dy.

Расстояние между этой точкой и точкой P равно:

Взяв производную по t, получим:

Чтобы найти минимум, мы устанавливаем его равным 0 и решаем для t.

Теперь, если вы разделите обе стороны на 2 и затем соедините полученные вами термы:

Вычитая t-член с обеих сторон уравнения, получим:

Теперь вы можете разделить обе стороны на (dx 2 + dy 2 ), чтобы получить:

Источник: http://csharphelper.com/blog/2016/09/find-the-shortest-distance-between-a-point-and-a-line-segment-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)

Add a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *