Cocos2D如何使用贝塞尔曲线模拟物体受重力影响的运动轨迹

10

我正在尝试操纵一个对象。当它靠近另一个物体(比如地球仪)时,我希望该物体对原始对象产生引力。我知道应该使用CCBezierTo,因此这不是一个编程问题,而是一个数学问题。

从数学上讲,我该如何计算贝塞尔曲线的三个点(1、2和结束点),并根据距离(越远则拉力越小)给它一个权重。我已经在变量中映射了距离。

想象一艘飞船绕月球弹射。

代码:

ccBezierConfig bezier;
bezier.controlPoint_1 = ccp(projectile.position.x + 10, projectile.position.y + 20);
bezier.controlPoint_2 = ccp(projectile.position.x + 20, projectile.position.y + 40);
bezier.endPosition = ccp(projectile.position.x + 30, projectile.position.y+60);
id bezierAction = [CCBezierTo actionWithDuration:1 bezier:bezier];
[projectile stopAllActions];
[projectile runAction: bezierAction];

1
为什么不直接将与物体距离的平方成比例的力向量施加到弹丸上呢?也就是说,为什么不直接“做重力”?假设弹丸没有直接朝向物体中心,路径将自然弯曲。 - Robinson
http://oreilly.com/catalog/9780596000066 - MK.
1个回答

1

这个轨迹将会是一个圆锥曲线(直线、双曲线、抛物线、椭圆或圆)。

你可以将它们表示为有理贝塞尔曲线。 http://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/NURBS/RB-conics.htmlhttp://www.cs.unc.edu/~dm/UNC/COMP236/papers/farin.pdf

如果你坚持使用二次贝塞尔曲线,我会使用这样的函数 http://www.netlib.org/minpack/lmder.f 通过最小二乘法找到控制点的最佳位置。

我认为最简单的方法是计算圆锥曲线并将它们作为线循环绘制。

或者你可以实现一个Verlet积分器并解决运动方程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接