Какой алгоритм определяет близость точки к кривой Безье?

Я хочу определить, когда точка (положение мыши) находится на или рядом с кривой, определенной серией B-сплайнов. контрольные точки.

Информация, которую я буду иметь для B-сплайна, представляет собой список из n контрольных точек (в координатах x, y). Список контрольных точек может быть любой длины (> = 4) и определять B -сплайн, состоящий из (n − 1) / 3 кубических кривых Безье. Все кривые Безье кубические. Я хочу установить параметр k (в пикселях) расстояния, определяемого как «около» кривой. Если позиция мыши находится в пределах k пикселей кривой, мне нужно вернуть истину, в противном случае - ложь.

Есть ли алгоритм, который дает мне эту информацию. Любое решение не должно быть точным - я работаю с допуском в 1 пиксель (или координату).

Я обнаружил, что следующие вопросы, кажется, предлагают некоторую помощь, но не отвечают на мой точный вопрос. В частности, первая ссылка кажется решением только для 4 контрольных точек и не принимает во внимание фактор близости, который я хочу определить.

Положение точки относительно кривой Безье

Пересечение между кривой Безье и отрезок

РЕДАКТИРОВАТЬ:

Я обнаружил, что следующие вопросы, кажется, предлагают некоторую помощь, но не отвечают на мой точный вопрос. В частности, первая ссылка кажется решением только для 4 контрольных точек и не принимает во внимание фактор близости, который я хочу определить.

Положение точки относительно кривой Безье

Пересечение между кривой Безье и отрезок

РЕДАКТИРОВАТЬ:

Я обнаружил, что следующие вопросы, кажется, предлагают некоторую помощь, но не отвечают на мой точный вопрос. В частности, первая ссылка кажется решением только для 4 контрольных точек и не принимает во внимание фактор близости, который я хочу определить.

Положение точки относительно кривой Безье

Пересечение между кривой Безье и отрезок

РЕДАКТИРОВАТЬ: Пример кривой:

 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 дюйма) . В атрибуте pos списку контрольных точек может предшествовать начальная точка ps и / или конечная точка pe. Они имеют обычное представление положения с префиксом «s» или «e» соответственно. "

EDIT2: Дальнейшее объяснение точки «e» (и s, если есть).

В атрибуте pos списку контрольных точек может предшествовать начало точка ps и / или конечная точка pe. Они имеют обычное представление позиции с префикс «s» или «e» соответственно. Начальная точка присутствует, если есть стрелка на p0. В этом случае стрелка идет от p0 к ps, где ps фактически находится на границе узла. Длина и направление стрелки задаются вектором (ps −p0). Если здесь не стрелка, p0 находится на границе узла. Точно так же точка pe обозначает стрелка на другом конце ребра, соединяющаяся с последней точкой сплайна.

10
задан Community 23 May 2017 в 12:06
поделиться