Deseo determinar cuándo un punto (posición del mouse) está activado o cerca de una curva definida por una serie de puntos de control B-Spline.¿Qué algoritmo determina la cercanía de un punto a una curva de Bezier?
La información que tendré para B-Spline es la lista de n puntos de control (en coordenadas x, y). La lista de puntos de control puede ser de cualquier longitud (> = 4) y definir una B-spline que consta de (n-1)/3 curvas cúbicas de Bezier. Las curvas de Bezier son todas cúbicas. Deseo establecer un parámetro k, (en píxeles) de la distancia definida para estar "cerca" de la curva. Si la posición del mouse está dentro de k pixeles de la curva, entonces necesito devolver verdadero, de lo contrario, falso.
Hay un algoritmo que me da esta información. Cualquier solución no necesita ser precisa: estoy trabajando con una tolerancia de 1 píxel (o coordenada).
He encontrado que las siguientes preguntas parecen ofrecer algo de ayuda, pero no responden mi pregunta exacta. En particular, la primera referencia parece ser una solución solo para 4 puntos de control, y no tiene en cuenta el factor de proximidad que deseo definir.
Position of a point relative to a Bezier curve
Intersection between bezier curve and a line segment
EDIT: Una curva de ejemplo:
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
La descripción del formato es: "Cada borde se le asigna un atributo pos, que consiste en una lista de Ubicaciones 3n + 1. Estos son puntos de control B-spline: los puntos p0, p1, p2, p3 son la primera spline de Bezier, p3, p4, p5, p6 son los segundos, etc. Los puntos están representados por dos enteros separados por una coma , representante resentir las coordenadas X e Y de la ubicación especificada en puntos (1/72 de pulgada). En el atributo pos, la lista de puntos de control puede estar precedida por un punto de inicio ps y/o un punto final pe. Estos tienen la representación posición habitual con un "s", o "e" prefijo, respectivamente "
Edit2: explicación adicional de la ". E" punto (y s si está presente)
En el atributo pos, la lista de puntos de control puede estar precedida por un punto de inicio ps y/o un punto final pe. Estos tienen la representación de posición habitual con un prefijo "s" o "e", respectivamente. el punto está presente si hay una flecha en p0. En este caso, la flecha es de p0 a ps, donde ps está realmente en el límite del nodo La longitud y dirección de la punta de flecha viene dada por el vector (ps -p0) Si hay no hay flecha, p0 está en el límite del nodo. De manera similar, el punto pe designa una flecha en el otro extremo del borde, que se conecta al último punto de spline.
¿Cómo estás trabajando con la curva de Bezier? ¿Para qué estás escribiendo una aplicación? La mayoría de las veces, con los elementos de la interfaz de usuario puede definir un mouseover o algo así, ¿está escribiendo un elemento UI desde cero? ¿Que lenguaje? – jcolebrand
Curva cúbica de Bezier SIEMPRE depende de exactamente 4 puntos de control. Tal vez quiera hacer una http://en.wikipedia.org/wiki/Spline_(mathematics) de varias curvas o algo así. – skalee
@drachenstern Estoy efectivamente escribiendo un elemento UI desde cero. Estoy escribiendo un editor gráfico, donde los diversos elementos del editor son representaciones visuales de los objetos subyacentes y necesitan manipularlos de acuerdo con las reglas que gobiernan los objetos. –