quadraticCurveTo
рисует квадратичную кривую Безье .
Формулы для расчета координат точки в любой заданной позиции (от 0 до 1) на кривой:
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
где (x1, y1) - начальная точка, (x2, y2) - контрольная точка, а (x3, y3) - конечная точка.
Итак, превращая это в JavaScript, мы получаем что-то вроде
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)
};
}
Если вы передадите начальную, конечную и контрольную точки на getQuadraticCurvePoint
там, вместе с 0.5
для положения на полпути, вы должны получить объект с координатами X и Y.
Отказ от ответственности - я не тестировал код, поэтому ваш пробег может отличаться, но он кажется правильным. ;)
РЕДАКТИРОВАТЬ: я тестировал код здесь в jsfiddle. http://jsfiddle.net/QA6VG/206/