2011-06-06 22 views
10

我想操縱一個對象。當它靠近另一個物體時,讓我們說一個地球儀,我希望地球儀對原始物體有一個引力。我知道我應該使用CCBezierTo,所以這不是一個編程問題,因爲它是一個數學問題。Cocos2D圍繞對象的貝塞爾曲線,就像是通過重力

在數學上,我怎麼能找出貝塞爾曲線的三個點(1,2和end),並根據它的距離給它一個權重(更遠=更小的拉力)。我已經在變量中映射了距離。

想想太空船在月球周圍彈跳。

代碼:

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 2011-06-17 10:40:31

+0

http://oreilly.com/catalog/9780596000066 – 2011-06-29 03:43:05

回答

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積分器並求解運動方程。