Скрипты: sDotToLineDist

 

sDotToLineDist:

Скрипт с функцией расчета расстояния от точки до линии.


Принцип расчета

По координатам двух точек линии получаем формулы линии вида y=a+k*x. Коэффициент k определят величину наклона линии, то есть изменение координаты y на единицу изменения координаты x. Рассчитывается коэффициент k следующим образом:

double K=(LY2-LY1)/(LX2-LX1);

Константа a определяет значение линии при x=0, то есть соответствует уровню, на котором линия пересекает ось y. Зная коэффициент наклона и координату x одной из точек линии, вычисляем а:

double LA=LY1-K*LX1;

Расстояние от точки до лини определяется по перпендикуляру, проведенному к линии. Если повернуть рисунок на 90 градусов против часовой стрелки, линия d будет иметь такой же коэффициент наклона как и основная линия, но с другим знаком. Зная коэффициент наклона и координаты одной точки, можно получить уравнение линии, но в данном случае в форме x=a-ky. Значит константа a:

double DA=DX+K*DY;

Располагая формулами двух линий, найдем точку их пересечения. Для этого выраженный формулой первой линии y подставляем в формулу второй линии, делаем небольшие преобразования и получаем координату x точки пересечения:

double CX=(DA-K*LA)/(1.0+K*K);

Полученный x подставляем в формулу первой линии и получаем координату y точки пересечения линий:

double CY=LA+K*CX;

Зная координаты двух точек, можно вычислить расстояние между ними по осям x и y (величины проекций на оси). Далее, при помощи теоремы Пифагора вычислить расстояние:

MathSqrt(MathPow(DX-CX,2)+MathPow(DY-CY,2))

Желающие могут поучаствовать в обсуждение вопроса в теме на форуме https://www.mql5.com/ru/forum/237198 или ниже в комментариях.

Автор: Dmitry Fedoseev