незваный гость писал(а):
У него есть неизбавимое достоинство: он позволяет проверить на принадлежность к окрестности к.Б. Что же касается объёма вычислений, то не так страшен чёрт, как его малюют. Если использовать деление к.Б. пополам (собственно, алгорифм Безье), то получается довольно шустро. По меньшей мере, результаты сравнения не очевидны.
Пару лет назад писал контрол для построения графиков.
Нужно было реализовать две вещи -
1. Выделение кривой (как раз проверка попадания в окрестность);
2. Динамическое определение данных по графику и отображение их на графике - а-ля "Курсор данных", для чего при перемещении мышки нужно было определять ближайшую точку кривой.
График может содержать десятки кривых, каждая может содержать тысячи точек, для сглаживания использовал сплайны 3-го порядка (в форме Безье). Таким образом, необходимо "на лету" вычисление расстояний для достаточно большого числа сплайнов.
И тоже думал, что решение в лоб не пройдет, но оказалось, что не тут то было:))
Воспользовался как-раз тем, что упомянул выше Алексей К.
Копался в литературе, находил статьи буржуев по этой теме, но лучше и проще нахождения корней уравнения 5 степени (производной расстояния до точки) методом Ньютона не нашел:)
Поэтому его и реализовал.
)
Вычислений много только на первый взгляд, на деле работает шустро.
Получаются одни проверки и исключения.
А главное - что решать уравнение 5-го порядка с большой точностью и не требуется, особенно с учетом того, что все равно нужно проверить попадание (например, в 5-10 пиксельную) окрестность. Я задавал точность что-то типа 1е-3, решалось всего за несколько итераций.