Конечно, надо смотреть, чтобы
, если
,
Я бы сказал так. Если длина ребра, в ваших обозначениях это
, существенно меньше чем расстояние от курсора до какого-то из концов ребра (то есть ребро по сути - точка а не отрезок), то за расстояние до ребра можно принять расстояние до одного из концов ребра -- погрешность будет не больше длины ребра, и дальше не считать попадает ли перпендикуляр на ребро или нет.
Вообще, если вы заботитесь о скорости\оптимальности вычислений, я бы наверное посоветовал делать так:
1. Вычисляем длину ребра, пусть будет
2. Вычисляем расстояние до первого конца ребра, пусть будет
3. Если
(например
) то квадрат искомого расстояния
, конец.
4. Вычисляем расстояние до второго конца ребра, пусть будет
5. Определяем наибольшую из длин
. Если это
, то высота точно попадает на ребро, переходим к вычислению высоты, пункт 8. Здесь можно добавить еще проверку: если
то у треугольника почти развернутый угол против ребра, и можно прикинуть чему равна высота.
6. Если наибольшая из длин это
, то вычисляем знак у
, если меньше или равно нулю, то треугольник тупоугольный с тупым углом против
или прямоугольный с гипотенузой
, тогда квадрат искомого расстояния
, конец. Если
, переходим к пункту 7.
7. Наибольшая из длин это
, вычисляем знак у
, если меньше или равно нулю, то треугольник тупоугольный с тупым углов против
или прямоугольный с гипотенузой
, тогда квадрат искомого расстояния
, конец. Если
, переходим к пункту 8.
8. Оба угла, прилежащие к ребру острые, высота попадает на ребро, вычисляем её квадрат
, конец.