Я хочу определить, когда точка (позиция мыши) включена или близка к кривой, определенной рядом контрольных точек B-Spline.
Информация, которую я буду иметь для B-Spline, - это список из n контрольных точек (в координатах x, y). Список контрольных точек может быть любой длины ( >= 4) и определять B-сплайн, состоящий из (n-1)/3 кубических кривых Безье. Кривые Безье все кубические. Я хочу установить параметр k (в пикселях) расстояния, определенного как "близкое" к кривой. Если позиция мыши находится в пределах k пикселей кривой, тогда мне нужно вернуть true, в противном случае false.
Есть ли алгоритм, который дает мне эту информацию. Любое решение не обязательно должно быть точным - я работаю с допуском в 1 пиксель (или координату).
Я обнаружил, что следующие вопросы, похоже, дают некоторую помощь, но не отвечают на мой точный вопрос. В частности, первая ссылка, по-видимому, является решением только для 4 контрольных точек и не учитывает коэффициент близости, который я хочу определить.
Позиция точки относительно кривой Безье
Пересечение между кривой Безье и сегментом линии
EDIT: Пример кривой:
e, 63.068, 127.26
29.124, 284.61
25.066, 258.56
20.926, 212.47
34, 176
38.706, 162.87
46.556, 149.82
54.393, 138.78
Описание формата: "Каждому ребру присваивается атрибут pos, который состоит из списка местоположений 3n + 1. Это контрольные точки B-сплайна: точки p0, p1, p2, p3 являются первыми безье сплайн, p3, p4, p5, p6 - второй и т.д. Точки представлены двумя целыми числами, разделенными запятой, представляющими координаты X и Y места, указанного в точках (1/72 дюйма). атрибуту, списку контрольных точек может предшествовать начальная точка ps и/или конечная точка pe. Они имеют обычное позиционное представление с префиксом" s "или" e ", соответственно."
EDIT2: Дальнейшее объяснение точки "e" (и s, если присутствует).
В атрибуте pos списку контрольных точек может предшествовать старт точка ps и/или конечная точка pe. Они имеют обычное позиционное представление с префикс "s "или" e", соответственно. Начальная точка присутствует, если есть стрелка в точке p0. В этом случае стрелка находится от p0 до ps, где ps действительно находится на границе node s. Длина и направление стрелки задаются вектором (ps -p0). Если здесь не является стрелкой, p0 находится на границе node s. Точно так же точка pe обозначает стрелка на другом конце края, соединяющаяся с последней точкой сплайна.