2

cocos2d for iphone コンテキストで、難しい数学の問題を解こうとしています。

基本的に、時間の経過とともに回転するルーレット盤があります。

特定のポイント (コンパスの序数ポイント N、S、E、W など) でスプライトをホイールにラッチし、他のすべてのポイントで跳ね返らせたいと考えています。

ホイールが回転しているイメージがあり、スプライトが回転しているときに円の適切な点で円と交差したかどうかをテストできる部分を解決する必要があります。

この質問は正しい方向に進んでいると思いますが、頭がわかりません。誰でも説明できますか?

特定の点に最も近い円上の点を見つける最良の方法

4

2 に答える 2

1

したがって、中心が (x0,y0) の半径 r の円があります。

点は座標 (x,y) で円の外側にあります。あなたの質問は、円自体の点 (x,y) に最も近い点を見つけることです。

解決策は簡単です。点の円への最も近い投影は、単純なスケーリングによって実現されます。したがって、

d = sqrt((x-x0)^2 + (y-y0)^2)
xp = x0 + (x - x0)*r/d
yp = y0 + (y - y0)*r/d

新しい点 (xp,yp) は、円自体の上にあります。正直なところ、原点が円の中心にある極座標で作業したほうがよいでしょう。その後、すべてがはるかに簡単になります。

あなたの次の質問は、円のどこにヒットしたかです。円上のコンパスのポイントが時間とともに回転していることを忘れないでください。atan2 関数は、点 (xp-x0,yp-y0) の角度を示します。ほとんどのツールセットにはその機能があります。ここで原点を差し引いたことを確認してください。

于 2009-04-18T11:23:11.853 に答える
1

私が正しく理解していれば:

まず、スプライトとルーレット盤の中心の間の距離を確認します。これにより、スプライトがホイールの端にあるかどうかがわかります。(じゃないと何も起きないよね?)

次に、スプ​​ライトがルーレット盤の「x 軸」からなす角度を見つけます。

spriteAngle = atan2(sprite.x - rouletteCentre.x, sprite.y - rouletteCentre.y)

関数に相当するものを見つける必要がありatan2()ます。通常、答えはラジアンで返されます。必要に応じて、度または 1/4 回転などに変換することもできます。

次に、ルーレット ホイール自体が回転している角度を引きます (ホイール自体が回転している場合は、回転していない場合は既に完了しています)。角度測定が一貫していることを確認してください。

actualAngle = spriteAngle - rouletteRotationAngle

actualAngle は 0 ~ 360 度の範囲外になる可能性があるため、「ラップ アラウンド」する必要があることに注意してください。

最後に、許容範囲として小さな範囲の値を許可する必要があります (たとえば、98 度から 102 度までは「北」としてカウントされる可能性があります)。

于 2009-04-18T11:25:34.500 に答える