10

オブジェクトを操作しようとしています。別のオブジェクト、たとえば地球に近づくと、地球に元のオブジェクトを重力で引っ張ってもらいたいと思います。私は使用することになっていることを知っているCCBezierToので、これは数学の質問であるため、プログラミングの質問ではありません。

数学的には、ベジェ曲線の3つのポイント(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.html および http://www.cs.unc.edu/~dm/UNC/COMP236/ papers/farin.pdf

二次ベジェセクションの使用を主張する場合は、この http://www.netlib.org/minpack/lmder.fのような関数を使用して、最小二乗最小化によって制御点の最適な位置を見つけます。

円錐曲線を計算してラインループとして描くのが一番簡単だと思います。

または、ベレの積分器を実装して、運動方程式を解きます。

于 2011-07-02T19:28:51.467 に答える