2011-11-21 42 views
9

Tôi có đường cong hình tròn có điểm đầu tiên và cuối cùng được cho (cụ thể là P0 (0,0) và P3 (1,1)). Hai điểm còn lại được xác định như sau: khối-bezier (0,25, 0,1, 0,25, 1,0) (X1, Y1, X2, Y2, cũng không được nhỏ hơn hoặc lớn hơn 0 hoặc 1 tương ứng)
Bây giờ tôi sẽ phải làm gì để có được tọa độ Y cho một X nhất định, giả sử chỉ có một? (Tôi biết rằng trong những trường hợp nhất định có thể có nhiều giá trị, nhưng chúng ta hãy bỏ chúng sang một bên. Tôi không làm khoa học tên lửa ở đây, tôi chỉ muốn có thể nhận được Y nhiều lần mỗi giây để thực hiện chuyển tiếp)Đường cong bezier khối - nhận Y cho X

Tôi đã tìm cách khai thác điều này: y coordinate for a given x cubic bezier, nhưng tôi không hiểu xTarget là gì.
Ồ, đây cũng không phải là bài tập về nhà, tôi chỉ hơi bực mình vì thực tế là không có nội dung nào dễ hiểu về đường cong khối bezier trên internet.

+0

Câu hỏi cũng xuất hiện tại đây: http://stackoverflow.com/questions/7348009/y-coordinate-for-a-given-x-cubic-bezier Bạn không chắc chắn cái nào là trước, nhưng nó có thể chứa thông tin bổ sung. – mredig

Trả lời

16

Nếu bạn có

P0 = (X0,Y0) 
P1 = (X1,Y1) 
P2 = (X2,Y2) 
P3 = (X3,Y3) 

Sau đó, đối với bất kỳ t trong [0,1] bạn sẽ có được một điểm trên đường cong cho bởi tọa độ

X(t) = (1-t)^3 * X0 + 3*(1-t)^2 * t * X1 + 3*(1-t) * t^2 * X2 + t^3 * X3 
Y(t) = (1-t)^3 * Y0 + 3*(1-t)^2 * t * Y1 + 3*(1-t) * t^2 * Y2 + t^3 * Y3 

Nếu bạn đang đưa ra một giá trị x, thì bạn cần phải tìm giá trị t trong [0,1] tương ứng với điểm đó trên đường cong, sau đó sử dụng các giá trị t đó để tìm tọa độ y.

Trong phương trình X(t) trên, thiết lập ở phía bên trái để giá trị x của bạn và cắm vào X0, X1, X2, X3. Điều này lá bạn với một đa thức khối với biến t. Bạn giải quyết điều này cho t, sau đó cắm giá trị t đó vào phương thức Y(t) để có được tọa độ y.

Giải quyết các cubic polynomial là khó khăn nhưng có thể được thực hiện bằng cách cẩn thận sử dụng một trong các phương pháp để giải quyết đa thức khối.

+0

Với sự giúp đỡ của một số bạn bè, tôi có thể hiểu được điều này. Tôi viết lại hai chức năng tôi có trong diễn đàn khác để hoàn thành những gì tôi cần: http://cl.ly/C1Nl (C#, cũng có thể không được đẹp) Cảm ơn sự giúp đỡ của bạn! :) –

+0

Nó là gì trong công thức này ?? –

+0

@JhansiKiRani t là bất cứ điều gì bạn muốn nó được, miễn là nó giữa 0 và 1. –

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