2012-03-14 20 views
6

Tôi có câu hỏi liên quan đến công thức uốn cong qua điểm kiểm soát. Như bạn đã biết, HTML Canvas có quadraticCurveTo(x1, y1, x2, y2) với x1 and x2 là điểm kiểm soát.Giải thích - Công thức uốn cong qua điểm kiểm soát

Tuy nhiên, khi bạn cố gắng vẽ nét bằng cách sử dụng nó, đột quỵ sẽ không bao giờ chạm vào điểm điều khiển.

Vì vậy, chúng ta có công thức này:

x1 = xt * 2 - (x0 + x2)/2; 
y1 = yt * 2 - (y0 + y2)/2; 

(xt, yt) = điểm bạn muốn đường cong qua. t cho tiếp tuyến vì nó là 90 độ vuông góc tại điểm đó.

Điều này tính toán lại vị trí điểm điều khiển.

Tôi đã lấy công thức này từ một cuốn sách, tuy nhiên cuốn sách không giải thích cách nó được bắt nguồn. Tôi đã thử google xung quanh nhưng vô ích.

Bất kỳ ai cũng biết công thức này được bắt nguồn như thế nào?

Cảm ơn, Venn.

+0

Đây là từ http://stackoverflow.com/questions/6711707/draw-a-quadratic-bezier-curve-through-three-give n-điểm cho bất cứ ai tự hỏi – mowwwalker

Trả lời

2

bậc Bezier đường cong được mô tả bởi phương trình:

x(t) = x0 * (1-t)^2 + 2 * x1 * t * (1 - t) + x2 * t^2 (và tương tự cho y (t)).

Nếu chúng ta áp dụng giá trị tham số t = 1/2 (một cách nào đó - giữa của đường cong), chúng ta sẽ nhận thức của bạn:

x(t=1/2) = xt = x0 * 1/4 + 2 * x1 * 1/4 + x2 * 1/4

sau đó

x1/2 = xt - (x0 + x2)/4

x1 = 2 * xt - (x0 + x2)/2

+0

Cảm ơn sự giúp đỡ! Điều đó thật tuyệt. – Vennsoh

0

Đây được gọi là Spline. Hơn nữa, có vẻ như họ đang sử dụng Bezier Curve.

+0

Cảm ơn nhưng tôi vẫn không nhận được nó như thế nào x1 = xt * 2 - (x0 + x2)/2; y1 = yt * 2 - (y0 + y2)/2; đang được bắt nguồn. – Vennsoh

+0

@Vennsoh: Đã chỉnh sửa câu trả lời của tôi, tôi tin rằng họ đang sử dụng đường cong Bezier bậc hai. Xem dẫn xuất trong bài viết wiki được liên kết. – mindvirus

Các vấn đề liên quan