2009-04-18 7 views
2

私は、iPhoneのコンテキストのためのcocos2dで、難しい数学の問題を解決しようとしています。cocos2dが円上の点を見つけるのに役立ちます

基本的に私は時間の経過とともに回転するルーレットホイールを持っています。

私はSpriteラッチを特定の点(コンパスの順番N、S、E、Wのような)でホイールに乗せて、他のすべての点で跳ね返りたいと思います。

私は、回転しているホイールのイメージを持っていて、回転しているときに円の右の点でスプライトがサークルと交差しているかどうかをテストできる部分を解決する必要があります。

私はこの質問が正しい方向に進んでいると思っていますが、私はその周りに頭を浮かべることはできません。誰でも説明できる?

Best way to find a point on a circle closest to a given point

答えて

1

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

ファーストをスプライトとルーレットホイールの中心間の距離を確認してください。スプライトがホイールの端にあるかどうかを示します。 (そうでない場合、何も起こりません、右ですか?)

次に、スプ​​ライトがルーレットホイールの "x軸"から作る角度を探します。

atan2()の機能に相当するものを見つける必要があります。通常、ラジアンで答えを返します。もしあなたが好きなら、それを度または四分の一または何かに変換したいかもしれません。

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

actualAngle = spriteAngle - rouletteRotationAngle 

actualAngleが範囲0から360度の外であってもよく、あなたはそれが「ラップアラウンド」にする必要がありますのでご注意ください。

最後に、許容範囲として小さい値を許可したいと考えてください(たとえば、98度から102度は「北」とみなされます)。

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)がある角度を与えます。ほとんどのツールセットにはその機能があります。ここで私は原点を引いたことを見てください。

関連する問題