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];
4

1 回答 1

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 积分器并求解运动方程。

于 2011-07-02T19:28:51.467 回答