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

swi*_*itz 10 bezier physics objective-c gravity cocos2d-iphone

我正试图操纵一个物体.当它接近另一个物体时,让我们说一个地球仪,我希望地球对原始物体有一个引力.我知道我应该使用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];
Run Code Online (Sandbox Code Playgroud)

who*_*isp 1

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

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

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

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

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