2009-05-28 17 views
8

Tengo una curva de Bezier especificada por 4 puntos. Necesito saber si un punto está en el lado izquierdo o derecho de la curva Bezier. ¿Me puede sugerir un algoritmo?Posición de un punto relativo a una curva de Bezier

Editar: Estoy seguro de que la forma en que generar la curva de Bezier no formaría bucles.

Edición posterior Me di cuenta de que mi problema inicial podría resolverse sin utilizar la posición relativa. Cuando publiqué esta pregunta, estaba pensando que existe una fórmula matemática para la posición relativa de manera similar a la comprobación de si un punto está en el interior de un círculo. Parece que esto no es posible. Entonces, aceptaré la respuesta que sugerirá una solución eficiente en el tiempo.

+1

Es posible que necesite ser un poco más específico sobre lo que está tratando de lograr ...¿Qué tipo de respuesta esperas, por ejemplo, si la curva bezier forma un bucle? – jerryjvl

+0

Quiero mover un objeto siguiendo una trayectoria de curva Bezier. Si su posición actual está en el lado izquierdo de la curva, cambio su dirección a la derecha y viceversa. –

+0

Tenga en cuenta que las curvas de Bezier definitivamente pueden formar bucles ... si cruza los vértices de control relativos a los puntos finales, p. tener los cuatro vértices en orden: (0, 0), (100, 100), (100, 0), (0, 100) deberían hacer el truco. – jerryjvl

Respuesta

5

Puede determinar el punto más cercano en la curva de bezier con un algoritmo bastante sencillo (relacionado con la subdivisión k. Algoritmo de DeCastleju). Mire las gemas de gráficos si necesita detalles.

En ese punto, incluso con bucles, puede determinar la lateralidad determinando si el vector al punto evaluado desde el punto más cercano está a la izquierda de la derecha del vector que recorre la curva (¿velocidad? - no estoy seguro del término correcto aquí ...) del bezier en el punto más cercano que determinó.

Puede obtener -que- por producto cruzado de los dos vectores. Negativo o positivo determinará la destreza y el lado de la línea en el que se encuentra.

Por supuesto, en un bucle la lateralidad se definirá como si fuera un automóvil conduciendo por la línea, ¿estaría mirando por la ventana derecha o izquierda en el punto sobre la marcha ... No, si usted es a la derecha o izquierda de todo el garabato bezier. Por lo tanto, depende de cómo defina la "lateralidad"

Disculpe si mis términos están desactivados. Ha sido un tiempo desde que tuve que hacer nada con Bezier de

Sería más fácil de hacer un dibujo;)

+0

Encontré la solución en Gemas Gráficas: Resolviendo el Problema del Punto más Cercano por Schneider, Philip J. Gracias por contándome sobre Graphic Gems ;;) –

0

No puedo recordar las matemáticas a esta hora tardía, pero es probable que desee utilizar un algoritmo de subdivisión para la curva para refinar progresivamente hasta que los segmentos sean lo suficientemente "rectos" como para tratarlos como segmentos de línea para el propósitos de su determinación.

Puede obtener una respuesta más rápida utilizando los poliedros delimitadores de los refinamientos de curva para determinar en qué punto su "punto" está fuera de todos los poliedros, y luego aplanarlos inmediatamente hasta los segmentos de línea.

1

Si solo quieres que tu objeto siga la curva (como dices en tu comentario), ¿por qué no simplemente mueves tu objeto con la ecuación paramétrica? See this article

0

Suponiendo que el punto está restringido a la curva, debe definir uno de los anclajes como el inicio y el otro como extremo, luego calcule un punto que pertenece a la curva y está en el medio (mitad de la longitud) .. De esa manera, puede decir si el punto está entre el inicio y el medio o el medio y el final.

¿Eso es lo que quieres o estoy totalmente perdido?

+0

A partir de esta imagen http://www.moshplant.com/direct-or/bezier/curve01.gifQuiero saber si un punto está en el lado izquierdo o derecho de la curva. Por supuesto, hay varios casos y algunos de ellos donde no hay lado derecho o izquierdo. Pero por el bien del ejemplo, considero solo el caso de la curva de la imagen. La respuesta de jerryjvl parece ser lo suficientemente buena, pero quiero saber el rendimiento de ese algoritmo. O si hay un mejor algoritmo. Disculpa por ser tan incoherente :(El inglés no es mi primera lengua –

+0

mina ni! Soy venezolano! – coma

1

Here is math para cúbica y cuadrática curva Bézier implicitization.

Cuestiones relacionadas