10 votos

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

Yo subdividir un cúbica de Bézier en un determinado t valor de uso de de Casteljau del algoritmo, lo que produce dos curvas de Bézier cúbicas. Después me "escala" de la segunda curva (proporcionalmente).

Me gustaría volver a conectar o aproximada de las dos curvas a/con una sola curva en un tercer paso. Es eso posible?

two connected Bézier curves

Esto ilustra lo que estoy intentando hacer.

Supongo que invertir de Casteljau del algoritmo no funciona porque no tengo uno de los puntos intermedios.

Si hay varios enfoques, yo estaría a favor de una más simple (calcule más rápido) de la estrategia.

Gracias de antemano.

Actualización: Tal vez esta cifra se hace más clara; muestra todos los puntos que tengo: Bézier curves with convex hulls

El original cúbica de Bézier es definido por los puntos de $ p_{0}, p_{1}, p_{2}, p_{3} $.

Se divide en un determinado $ t $ (tiempo) el valor de uso de de Casteljau del algoritmo, que los rendimientos de los puntos de $ q_{1}, r_{2}, i_{1}, q_{2}, r_{1}, k $ donde $ k $ es el punto de división.

Los dos subcurves son definidos por los puntos de control $ p_{0}, q_{1}, q_{2}, k $$ k, r_{1}, r_{2}, p_{3} $, respectivamente.

La ampliación de la segunda subcurve es definido por los puntos de $ k, {r}' _{1}, {r}' _{2}, {r}' _{3} $

Se aplicará la escala de la siguiente manera: $ {p}' = k + (p - k) \cdot factor $ $ r_{1}, r_{2}, p_{3} $

7voto

James Woolfenden Puntos 177

Usted probablemente ya sabe esto, pero me deja explícitamente el punto de salida:

== coincidencia exacta ==

No es posible construir una sola curva de Bézier cúbica que coincide exactamente con la nueva curva.

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

No es posible construir una sola curva de Bézier cúbica, ya que, como todos solo cúbicos curvas, tiene curvatura constante C a lo largo de su longitud, tal que C=a lo largo de la parte de la longitud, y C=B a lo largo del resto de la longitud, donde Un<>B.

(Estoy mal uso del término "curvatura" de aquí para algo que es más precisamente el 3 de derivada de una curva, a veces llamado el "tirón").

== aproximación ==

Quizás la aproximación más simple es: Utilice el punto de partida inicial y primer control nudo -- p0 y p1, y el control final de nudo y final punto final -- r 2 y r 3. El uso de los 4 puntos como el inicio, el control de los nudos, y el punto final de una curva que se aproxima a la que usted desea: a0, a1, a2, a3.

Esta aproximación exactamente éxitos de los extremos de la curva, y tiene la misma inicial y final de la pendiente en los extremos, pero ligeramente se aparta de su curva deseada en el medio. En particular, probablemente no va exactamente por el caso K.

Hay muchas otras posibles aproximaciones que podría hacer. El "Don Lancaster Gurú de la Guarida de interpolación Cúbica de la Biblioteca" puede tener los detalles, me estoy dejando fuera:

  • Es posible empujar a1 a lo largo de la línea de p0-p1), o para empujar a2 a lo largo de la recta r'2-r 3-o ambos-que la aproximación de la curva no sólo se inicia y termina en los mismos puntos y pendientes, pero también pasa por el caso K.
  • elija cualquiera de los 4 puntos a lo largo de su nueva curva (tal vez los extremos, en el caso de K, y algún otro punto) y generar una curva de Bézier cúbica que pasa exactamente a través de todos los 4 puntos.
  • recoger muchos puntos a lo largo de su nueva curva -- agrupados juntos en los lugares donde la curva de adaptación es importante, tal vez cerca de los extremos y el punto K, y más espaciadas en donde la curva de la coincidencia no es tan importante, y generar una curva de Bézier cúbica que es una de mínimos cuadrados que se ajuste mejor a esos puntos.

2voto

bubba Puntos 16773

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

Si vas a aproximadas, hay dos opciones obvias para el approximant:

(1) Una Curva cúbica. Yo no esperaría que esto funcione muy bien. La aproximación de error será mayor si la deformación de la sub-curva es significativo. De hecho, el error máximo será el máximo de las distancias $r_1r_1'$, $r_2r_2'$, $p_3r_3'$.

(2) Un spline cúbico (es decir, una secuencia de Bézier cúbicas). Pero, usted no necesita un proceso de aproximación a producir este spline -- usted ya tiene una secuencia de Bézier cúbicas, es decir, los dos que tengo de el de de Casteljau subdivisión. Usted puede unirse a estos dos cúbicas juntos en una sola $C_1$ spline, si quieres, pero yo no veo ninguna gran ventaja de hacerlo.

2voto

Se puede calcular la distancia de q2 K y k r′1 marca como LeftLength y RightLength podemos imagen tenemos una curva cúbica, whick subdividen en k, pero ¿cuál es el valor de t? podemos calcular t de algoritmo de Casteljau, que es t = leftLength / rightLength nosotros también nudo que p1 de la nueva curva ' es p0-> dirección de p1 y p2' es p3-> p2, para que podamos usar t para calcular p1 de la nueva curva 'y p2'.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X