Saltar al contenido

¿Cómo aproximar/conectar dos curvas de Bézier cúbicas continuas con/a una sola?

Poseemos la mejor respuesta que descubrimos online. Nosotros deseamos que te sirva de ayuda y si puedes comentarnos alguna mejora hazlo con total libertad.

Solución:

Probablemente ya sepas esto, pero déjame señalarlo explícitamente:

== coincidencia exacta ==

No es posible construir una sola curva Bézier cúbica que coincida exactamente con su nueva curva.

Una sola curva Bézier cúbica tiene una “curvatura” A constante a lo largo de su longitud. Cuando la encoge, la nueva curva tiene una curvatura B “más aguda” (pero aún constante a lo largo de la nueva curva).

No es posible construir una única curva Bézier cúbica, ya que, como todas las curvas cúbicas sencillas, tiene una curvatura constante C a lo largo de su longitud, de modo que C=A en la parte de la longitud y C=B en el resto. de la longitud, donde A<>B.

(Estoy usando mal el término “curvatura” aquí para algo que es más precisamente la tercera derivada de una curva, a veces llamada “imbécil”).

== aproximación ==

Tal vez la aproximación más simple sea: use el punto de inicio inicial y el primer nudo de control, p0 y p1, y el nudo de control final y el punto final final, r’2 y r’3. Utilice esos 4 puntos como el inicio, los nudos de control y el punto final de una curva Bezier que se aproxime a la que desea: a0, a1, a2, a3.

Esta aproximación llega exactamente a los puntos finales de la curva deseada y tiene la misma pendiente inicial y final en esos puntos finales, pero diverge ligeramente de la curva deseada en el medio. En particular, probablemente no pase exactamente por el punto de corte K.

Hay muchas otras aproximaciones posibles que podrías hacer. La “Biblioteca Cubic Spline de Don Lancaster’s Guru’s Lair” puede tener los detalles que estoy omitiendo:

  • Es posible empujar a1 a lo largo de la línea p0-p1, o empujar a2 a lo largo de la línea r’2-r’3, o ambas, de modo que la curva de aproximación no solo comience y termine en los mismos puntos y pendientes, pero también pasa por el punto de corte K.
  • elija 4 puntos a lo largo de su nueva curva (quizás los puntos finales, el punto de corte K y algún otro punto) y genere una curva Bézier cúbica que pase exactamente por los 4 puntos.
  • elija muchos puntos a lo largo de su nueva curva, agrupados en lugares donde la coincidencia de curvas es importante, tal vez cerca de los puntos finales y el punto K, y más separados donde la coincidencia de curvas no es tan importante, y genere una curva Bézier cúbica que es al menos -cuadrados que mejor se ajusten a esos puntos.

Como han señalado otros, no es posible una solución exacta con una sola cúbica Bezier.

Si va a aproximar, hay dos opciones obvias para el aproximante:

(1) Una sola cúbica Bézier. No esperaría que esto funcionara muy bien. El error de aproximación será mayor si la deformación de la subcurva es significativa. De hecho, el error máximo será el máximo de las distancias $r_1r_1’$, $r_2r_2’$, $p_3r_3’$.

(2) Una spline cúbica (es decir, una secuencia de cúbicas Bezier). Pero no necesita un proceso de aproximación para producir esta spline; ya tiene una secuencia de cúbicas de Bezier, es decir, las dos que obtuvo de la subdivisión de Casteljau. Puede unir estos dos cubos en una sola spline $C_1$, si lo desea, pero no veo ningún gran beneficio al hacerlo.

Puede calcular la distancia de q2 k y kr′1 como LeftLength y RightLength. Podemos imaginarnos que tenemos una curva cúbica, que subdividimos en k, pero ¿cuál es el valor de t? Podemos calcular t a partir del algoritmo de de Casteljau, es decir, t = longitud izquierda / longitud derecha. También sabemos que p1′ de la nueva curva está en la dirección p0->p1, y p2′ está en la dirección p3->p2, por lo que podemos usar t para calcular la nueva curva es p1′ y p2′.

Reseñas y calificaciones de la guía

Si crees que te ha resultado de utilidad este artículo, sería de mucha ayuda si lo compartes con otros seniors y nos ayudes a extender este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *