2014-03-06 121 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