quadraticCurveTo
disegna un quadratic Bézier curve.
Le formule per calcolare le coordinate di un punto in una data posizione (da 0 a 1) sulla curva sono
x(t) = (1-t)^2 * x1 + 2 * (1-t) * t * x2 + t^2 * x3
y(t) = (1-t)^2 * y1 + 2 * (1-t) * t * y2 + t^2 * y3
dove (x1, y1) è il punto di partenza, (x2, y2) è il punto di controllo e (x3, y3) è il punto finale.
Quindi, svolta che in JavaScript, si finisce con qualcosa come
function _getQBezierValue(t, p1, p2, p3) {
var iT = 1 - t;
return iT * iT * p1 + 2 * iT * t * p2 + t * t * p3;
}
function getQuadraticCurvePoint(startX, startY, cpX, cpY, endX, endY, position) {
return {
x: _getQBezierValue(position, startX, cpX, endX),
y: _getQBezierValue(position, startY, cpY, endY)
};
}
Se si passa i punti di inizio, di fine e di controllo per getQuadraticCurvePoint
lì, insieme con 0.5
per la posizione a metà strada, si dovrebbe ottenere un oggetto con le coordinate X e Y.
Disclaimer - Non ho eseguito il test del codice, quindi il tuo chilometraggio può variare, ma è sembra a destra. ;)
MODIFICA: ho testato il codice qui in un jsfiddle. http://jsfiddle.net/QA6VG/
Si prega di spiegare che cosa si intende per "punto di controllo" e "a partire" e punti "fine". –
Il punto di controllo è un punto responsabile della forma della curva, il punto iniziale è il punto in cui inizia la curva e il punto finale è quello in cui termina la curva. –
Nessun singolo punto può essere responsabile della forma della curva - la forma della curva è definita dai valori di a, b, c quando viene scritta in forma generale. I tuoi punti di partenza e di arrivo - sono a livello l'uno dell'altro in orizzontale? Hai un'equazione che stai progettando? –