quadraticCurveTo
vẽ quadratic Bézier curve.
Các công thức để tính toán tọa độ của một điểm tại bất kỳ vị trí nhất định (0-1) trên đường cong là
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
nơi (x1, y1) là điểm khởi đầu, (x2, y2) là điểm điều khiển và (x3, y3) là điểm kết thúc.
Vì vậy, biến đó thành JavaScript, chúng ta kết thúc với một cái gì đó giống như
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)
};
}
Nếu bạn vượt qua điểm bắt đầu, kết thúc và kiểm soát để getQuadraticCurvePoint
ở đó, cùng với 0.5
cho vị trí nửa chừng, bạn sẽ nhận được một đối tượng với các tọa độ X và Y.
Disclaimer - Tôi đã không kiểm tra mã, do đó mileage của bạn có thể thay đổi, nhưng nó dường như đúng. ;)
EDIT: Tôi đã thử nghiệm mã ở đây trong một jsfiddle. http://jsfiddle.net/QA6VG/
Xin giải thích những gì bạn có ý nghĩa bởi "điểm kiểm soát" và "bắt đầu" và "kết thúc" điểm. –
Điểm kiểm soát là điểm chịu trách nhiệm về hình dạng đường cong, điểm bắt đầu là điểm bắt đầu đường cong và điểm cuối là điểm kết thúc của đường cong. –
Không có điểm duy nhất nào có thể chịu trách nhiệm về hình dạng của đường cong - hình dạng của đường cong được xác định bởi các giá trị a, b, c khi được viết dưới dạng chung. Điểm bắt đầu và kết thúc của bạn - chúng có nằm ngang với nhau không? Bạn có một phương trình bạn đang âm mưu? –