2014-03-06 163 views
1

我正在使用畫布進行拋射體運動模擬,並且需要繪製拋射體路徑(軌跡)的線。我相信最好的方法是用quadraticCurveTo()方法繪製一條貝塞爾曲線來實現這一點(因爲拋射體運動可以用拋物線建模)。如何使用貝塞爾曲線建模二次方程(計算控制點)

我知道拋物線的起點和終點以及最大值,但我不知道如何去計算我的貝塞爾曲線的控制點。

+1

實際上,貝濟耶對於彈丸的軌跡完全可怕,隨着時間參數不隨距離線性的。對於拋射體,你只是想使用更簡單,正確的物理拋物線功能。 –

+0

什麼是正確的物理拋物線函數? – acidic

+1

「正確的物理方面」。對象軌跡通常遵循拋物線路徑,用y表示。使用Bezier曲線繪製拋物線函數相對容易,但您不想將Bezier用於除純繪圖之外的任何其他工作。 –

回答

2

有更準確的方法來計算二次控制點,但這種密切近似具有非常快速計算的好處:

// calc a control point 
var cpX = 2*anywhereOnCurveX -startX/2 -endX/2; 
var cpY = 2*anywhereOnCurveY -startY/2 -endY/2; 

這裏有一個現場演示,它計算給定的起始近似控制點點,結束曲線上點和任意點(比開始/結束點之外的任何點):

http://jsfiddle.net/m1erickson/6jNCM/

+0

這個「逼近」有多大? – acidic

+1

該計算基於間隔T = 0.50,所以如果您提供曲線的起點,終點和中點,則計算將是完美的。這對你的需求來說最爲合適,因爲你從A點發射彈丸到B點,並且你有頂點。祝你的項目好運! – markE

1

對於貝塞爾曲線以形成拋物線,二階導數必須是不變。這要求:P0 - 3 * P1 = P3 - 3 * P2。

以下的控制點可以用於:

P0 = (x - w, y) 
P1 = (x - w/3, y + h) 
P2 = (x + w/3, y + h) 
P3 = (x + w, y) 
+0

什麼是'h'和'w'? – sam