Cocos2D Bezier围绕物体弯曲,好像是在重力作用下

时间:2011-06-06 04:18:47

标签: objective-c cocos2d-iphone physics bezier gravity

我正试图操纵一个物体。当它接近另一个物体时,让我们说一个地球仪,我希望地球对原始物体有一个引力。我知道我应该使用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 个答案:

答案 0 :(得分: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

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

我认为如果你只是计算圆锥曲线并将它们画成线环,那将是最简单的。

或者您实现了一个verlet积分器并求解了运动方程。