quadraticCurveTo
rysuje quadratic Bézier curve.
Wzory do obliczania współrzędnych punktu w określonym położeniu (od 0 do 1) na krzywej są
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
gdzie (x1, y1) jest punktem wyjścia (x2, y2) jest punktem kontrolnym i (x3, y3) jest punktem końcowym.
Tak, obracając że w JavaScripcie, możemy skończyć z czymś takim
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)
};
}
Jeśli przekazać początek, koniec i kontroli punktów getQuadraticCurvePoint
tam, wraz z 0.5
na stanowisko połowy, należy uzyskać obiekt ze współrzędnymi X i Y.
Zrzeczenie się - Nie testowałem kodu, więc Twój przebieg może się różnić, ale wygląda na prawo. ;)
EDYCJA: Testowałem kod tutaj w jsfiddle. http://jsfiddle.net/QA6VG/
Proszę wyjaśnić, co to znaczy "punktu kontrolnego" i "startu" i punktów "ending". –
Punkt kontrolny jest punktem, który odpowiada za kształt krzywej, punktem początkowym jest punkt, w którym rozpoczyna się krzywa, a koniec końcowy to punkt, w którym kończy się krzywa. –
Żaden pojedynczy punkt nie może być odpowiedzialny za kształt krzywej - kształt krzywej jest zdefiniowany przez wartości a, b, c, gdy jest zapisany w formie ogólnej. Twoje początkowe i końcowe punkty - czy poziomują się poziomo? Czy masz równanie, które knujesz? –