我正在使用畫布進行拋射體運動模擬,並且需要繪製拋射體路徑(軌跡)的線。我相信最好的方法是用quadraticCurveTo()方法繪製一條貝塞爾曲線來實現這一點(因爲拋射體運動可以用拋物線建模)。如何使用貝塞爾曲線建模二次方程(計算控制點)
我知道拋物線的起點和終點以及最大值,但我不知道如何去計算我的貝塞爾曲線的控制點。
我正在使用畫布進行拋射體運動模擬,並且需要繪製拋射體路徑(軌跡)的線。我相信最好的方法是用quadraticCurveTo()方法繪製一條貝塞爾曲線來實現這一點(因爲拋射體運動可以用拋物線建模)。如何使用貝塞爾曲線建模二次方程(計算控制點)
我知道拋物線的起點和終點以及最大值,但我不知道如何去計算我的貝塞爾曲線的控制點。
有更準確的方法來計算二次控制點,但這種密切近似具有非常快速計算的好處:
// calc a control point
var cpX = 2*anywhereOnCurveX -startX/2 -endX/2;
var cpY = 2*anywhereOnCurveY -startY/2 -endY/2;
這裏有一個現場演示,它計算給定的起始近似控制點點,結束曲線上點和任意點(比開始/結束點之外的任何點):
對於貝塞爾曲線以形成拋物線,二階導數必須是不變。這要求: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)
什麼是'h'和'w'? – sam
實際上,貝濟耶對於彈丸的軌跡完全可怕,隨着時間參數不隨距離線性的。對於拋射體,你只是想使用更簡單,正確的物理拋物線功能。 –
什麼是正確的物理拋物線函數? – acidic
「正確的物理方面」。對象軌跡通常遵循拋物線路徑,用y表示。使用Bezier曲線繪製拋物線函數相對容易,但您不想將Bezier用於除純繪圖之外的任何其他工作。 –