quadraticCurveTo
рисует quadratic Bézier curve.
Формулы для вычисления координат точки, в любом заданном положении (от 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) является отправной точкой, (х2, у2) является контрольной точкой, а (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.
Отказ от ответственности - я не тестировал код, поэтому ваш пробег может отличаться, но это кажется справа. ;)
EDIT: Я проверил код здесь в jsfiddle. http://jsfiddle.net/QA6VG/
Пожалуйста, объясните, что вы имеете в виду под "контрольной точки" и "начиная" и "окончание" точек. –
Контрольная точка - это точка, которая отвечает за форму кривой, начальная точка - это точка, где начинается кривая, а конечный pont - это тот, где заканчивается кривая. –
Ни одна точка не может быть ответственна за форму кривой - форма кривой определяется значениями a, b, c при записи в общем виде. Ваши начальные и конечные точки - они горизонтально расположены друг с другом? У вас есть уравнение, которое вы рисуете? –