Processing math: 100%

47 votos

Hay una forma explícita para cúbicos curvas de Bézier?

(Vea las ediciones en la parte inferior)

Estoy tratando de utilizar curvas de Bézier como una herramienta de animación. He aquí una imagen de lo que estoy hablando:

Example of a Bézier curve

Básicamente, el eje de valores puede representar cualquier cosa que puede ser animada (posición, escala, color, básicamente cualquier valor numérico). La curva Bézier se utiliza para controlar la velocidad a la que el valor está cambiando tan bien como inicio y el valor final y el tiempo. En este gráfico, la animación valor que poco a poco se acelere a una velocidad constante, luego desacelerar y detener.

El problema es, que una curva de Bézier se define con ecuaciones paramétricas.

fx(t):=(1t)3p1x+3t(1t)2p2x+3t2(1t)p3x+t3p4x

fy(t):=(1t)3p1y+3t(1t)2p2y+3t2(1t)p3y+t3p4y

Lo que necesito es una representación de la misma curva Bézier, sino que se define como value = g(time), que es, y = g(x).

He tratado de solucionar t en la x ecuación y sustituyendo en la y ecuación, pero que de 3er grado me está dando algo de dificultad. También probé la integración de la derivada de la curva Bézier (dy/dx) con respecto a t, pero no hubo suerte.

Alguna idea?

Nota : "no definido" situaciones se evitan mediante la prevención de la tangente en los puntos de control de salir del casco horizontal, evitando la superposición en el eje del tiempo.

EDITAR: He encontrado dos posibles soluciones. Uno utiliza el algoritmo de Decasteljau a la aproximación de las s parámetro de la t parámetro: s siendo el parámetro de la curva paramétrica y t siendo el parámetro de tiempo. Aquí (en la parte inferior).

El otro, por lo que puedo entender de la misma, recrea una ecuación polinómica de tercer grado de coincidencia de la curva de resolver un sistema de ecuación lineal. Aquí. Entiendo la idea, pero no estoy seguro de la aplicación. Alguna ayuda?

13voto

John Smithers Puntos 1459

Usted está realmente en busca de un cúbicos ecuación en una dimensión (el tiempo).

y=u0(1x3)+3u1(1x2)x+3u2(1x)x2+u3x3

Es todo lo que usted necesita.

Caminando t en intervalos iguales (digamos en pasos de 0,1) tiene puntos igualmente espaciados a lo largo de la curva paramétrica.

enter image description here

Por tanto, la respuesta a tu pregunta es realmente muy simple. El paramétrica de la curva de bézier proporciona 2 variables como la salida, con sólo 1 como variable de entrada. Para el control de una animación en el tiempo , como estas, que solo es un 1 dimensiones de la situación. Así que consideren t como el tiempo, y la caída de una variable (es decir soltar x). La animación curva de aceleración es controlado por el y valor:

enter image description here

Ahora como t=0,0.1..1, que tiene una animación parámetro que se inicia lentamente, se mueve a la velocidad media en el medio, y se ralentiza al final.


Ejemplos

Configuración u0=0, u1=0.05, u2=0.25, u3=1 da una facilidad en la curva (de inicio lento, rápido final)

enter image description here

Configuración u0=0, u1=0.75, u2=0.95, u3=1 da una facilidad de salida de la curva (inicio rápido, lento final)

enter image description here

3voto

Xetius Puntos 10445

Observe que si usted tiene p1y=0, p2y=1/3, p3y=2/3 y p4y=1, por lo que el fy(t)=t, entonces la gráfica que es en realidad de la función inversa de la fx(t), que va a ser un desastre inevitable y tan complicada como la fórmula habitual para las raíces de un polinomio cúbico.

Que muestra que la fórmula general necesariamente tiene que ser complicado. Dudo que haya algo útil para hacer...

2voto

clintp Puntos 5127

Asumiendo que el significado de la p1x, etc. era como Ross cree, usted debería ser capaz de resolver para t explícitamente en la ecuación con la fórmula en http://en.wikipedia.org/wiki/Cubic_equation#General_formula_of_roots. Por supuesto, este es un abultamiento de la solución y que se necesita para identificar la solución que es real (aunque no debería ser sólo 1 suponiendo que la curva puede ser representado como y=g(x)).

1voto

Thorsten Puntos 121

He intentado de las dos soluciones me he ligado a la pregunta original (Solución 1 y la Solución 2). Aquí están mis resultados.

Solución 1

La idea es recrear la curva con un tercer grado del polinomio, por que coincida con el valor en el P1 y P4 y sus respectivos pendiente. Este polinomio se puede resolver mediante un sistema de ecuaciones lineales. El único problema es que es posible crear una ladera infinita en P1 y P4 con la curva de Bezier, que es imposible recrear con el polinomio. También he intentado usar el 5to grado del polinomio (valor coincidente, derivada primera y segunda derivada) sin éxito, porque tiene el mismo problema.

Solución 2

Esta solución es bastante simple, pero un poco chapucero. La idea es usar el De algoritmo de Casteljau para buscar un t (parámetro de la curva Bézier) que coincida con un determinado x variable (eje x). El algoritmo es simple :

  1. Dividir la curva en la mitad
  2. Es el x del punto de división es aproximadamente igual a la buscó x? Si sí, vuelva t
  3. Otra cosa, si el término buscado x es mayor que el x del punto de división, repetir el algoritmo con el segmento de la derecha, más a la izquierda.

Una vez que usted tiene el t, se puede obtener el y valor de uso de la función de Bézier fy(t) en mi post original.

Así que, sí, trabajando, pero un poco chapucero.

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