2011-11-21 13 views
9

Tengo una curva de bezier cúbica donde se dan los primeros y últimos puntos (es decir, P0 (0,0) y P3 (1,1)). Los otros dos puntos se definen de la siguiente manera: cubic-bezier (0.25, 0.1, 0.25, 1.0) (X1, Y1, X2, Y2, también esos valores no deben ser menores o mayores que 0 o 1, respectivamente)
Ahora ¿Qué tendría que hacer para obtener la coordenada Y para una X dada, suponiendo que solo haya una? (Sé que bajo ciertas circunstancias puede haber múltiples valores, pero dejémoslos a un lado. No estoy haciendo ciencia de cohetes aquí, solo quiero poder hacer Y varias veces por segundo para hacer transiciones)Curvas de bezier cúbicas: obtener Y para X

Logré desenterrar esto: y coordinate for a given x cubic bezier, pero no entiendo qué significa xTarget.
Oh, también esto no es tarea en absoluto, estoy un poco molesto por el hecho de que no hay cosas comprensibles sobre las curvas de bezier cúbicas en internet.

+0

La pregunta también aparece aquí: http://stackoverflow.com/questions/7348009/y-coordinate-for-a-given-x-cubic-bezier No estoy seguro de cuál fue el primero, pero puede contener información adicional. – mredig

Respuesta

16

Si tiene

P0 = (X0,Y0) 
P1 = (X1,Y1) 
P2 = (X2,Y2) 
P3 = (X3,Y3) 

Entonces para cualquier t en [0,1] se obtiene un punto de la curva dada por las coordenadas

X(t) = (1-t)^3 * X0 + 3*(1-t)^2 * t * X1 + 3*(1-t) * t^2 * X2 + t^3 * X3 
Y(t) = (1-t)^3 * Y0 + 3*(1-t)^2 * t * Y1 + 3*(1-t) * t^2 * Y2 + t^3 * Y3 

Si se le da un valor x, entonces necesita encuentre qué valores t en [0,1] corresponden a ese punto en la curva, luego use esos valores t para encontrar la coordenada y.

En la ecuación X(t) de arriba, ponga el lado izquierdo para su valor x y enchufe en X0, X1, X2, X3. Esto te deja con un polinomio cúbico con la variable t. Resuelva esto para t, luego conecte ese valor t en la ecuación Y(t) para obtener la coordenada y.

Resolver el cubic polynomial es complicado pero se puede hacer utilizando cuidadosamente uno de los métodos para resolver un polinomio cúbico.

+0

Con un poco de ayuda de algunos amigos, pude comprender algo de esto. Reescribí dos funciones que obtuve en otro foro para lograr lo que necesitaba: http://cl.ly/C1Nl (C#, también puede no ser bonita) ¡Gracias por tu ayuda! :) –

+0

¿Qué es t en esta fórmula? –

+0

@JhansiKiRani t es lo que quiera que sea, siempre que esté entre 0 y 1. –

Cuestiones relacionadas