sphero Android SDK を使用しています。
ブレイクアウト クローン (アルカノイドなど) と、2D ゲームでボールが画面の横の端と画面の上部でどのように跳ね返るかを考えてみましょう。私は、それが跳ね返る方法は基本的な「反射」を使用し、すべてが摩擦がなく、回転力や重力などがないことを信じています.それをアップします。かなり狭い廊下があり、壁が 1 メートルしか離れていない現実の世界で、似たようなものをセットアップするとします。レンガと櫂を捨てて、2 つの壁と 1 つのボール (ボールはもちろん Sphero です) だけにしましょう。 リンク先の画像を考えてみましょう。実際の物理的な壁を使用した Sphero 2D 衝突エミュレーション
スワイプまたはジョイスティック操作で特定の方向にボールを開始すると仮定するか、プログラムで特定の速度でその方向にボールを送信するだけで、最初の壁に当たったときにある程度の速度 (x, y) を持つようになります。 CollisionDetectedAsyncData に含まれるデータを使用して、衝突時の速度と、壁とボールの中心を通る線とボールの衝突点の間の角度を特定する方法があります。画像に示されているように、2D ブレイクアウト クローンのようにボールを「バウンス」させることができますか? 衝突時の速度とその角度がわかれば、それができるはずです。「バウンス」後のボールの速度は、壁に衝突する直前と同じになります。
衝突をリッスンしているプロジェクト設定があり、ストリーミング LocatorData も取得しています。したがって、LocatorData と CollisionDetectedAsyncData の両方を利用できます。設定したしきい値に従って衝突が検出されたときに CollisionDetectedAsyncData インスタンスをログに記録し、それに基づいて計算を試みます。問題は、正確に CollisionDetectedAsyncData が保持するものに関しては、まだ理解できないことです。powerX と powerY が何かわかりません。ドキュメントはそれがマグニチュードだと言っていますが、何の大きさですか?ここで私の無知を許してください。お分かりのように、私は物理学科がとても苦手です。とにかく、現在の加速度ベクトルと前の加速度ベクトルの差が 15000 を超えると、LocatorData もログに記録します。
(CollisionDetectedAsyncData)
01-20 22:35:58.559: WARN/CollisionCalculator(15101): Begin calculateReactionHeading
01-20 22:35:58.559: WARN/CollisionCalculator(15101): Calculating Reaction Heading with Algorithm 3
01-20 22:35:58.559: WARN/CollisionCalculator(15101): Angle relative to [X:13.970461890040886, Y:76.02953810995912]
01-20 22:35:58.559: WARN/CollisionCalculator(15101): Result Angle: 76.02953810995912
01-20 22:35:58.559: WARN/CollisionCalculator(15101): Impact Heading: 0.0
01-20 22:35:58.559: WARN/CollisionCalculator(15101): Power X: 205
01-20 22:35:58.559: WARN/CollisionCalculator(15101): Power Y: 51
01-20 22:35:58.559: WARN/CollisionCalculator(15101): Acceleration X: -0.562255859375
01-20 22:35:58.559: WARN/CollisionCalculator(15101): Acceleration Y: -2.44140625E-4
01-20 22:35:58.559: WARN/CollisionCalculator(15101): Calculated Heading: 283.9704618900409
01-20 22:35:58.559: WARN/CollisionCalculator(15101): Calculated Heading Mod Abs 360: 283.9704618900409
01-20 22:35:58.559: WARN/CollisionCalculator(15101): End calculateReactionHeading
(ロケーターデータ)
01-20 22:35:58.679: WARN/CollisionCalculator(15101): Significant acceleration magnitude found! Magnitude: 48047.68312045681
01-20 22:35:58.679: WARN/CollisionCalculator(15101): Previous Vectors [Velocity: x=5.300000190734863, y=-1.2000000476837158], [Acceleration: x=-399.99961853027344, y=99.99990463256836]
01-20 22:35:58.679: WARN/CollisionCalculator(15101): Current Vectors [Velocity: x=27.899999618530273, y=92.19999694824219], [Acceleration: x=11299.999713897705, y=46699.99849796295]
01-20 22:35:58.679: WARN/CollisionCalculator(15101): Angle theta=3.2335627660548973
01-20 22:35:58.679: WARN/CollisionCalculator(15101): Angle of current Velocity vector relative to [X=73.16402521005779, Y=16.835974789942213]
OK、この質問には膨大な情報が含まれていることは承知していますが、これは十分に複雑な質問であり、可能な限り詳細を記載する必要があると感じました。
しかし、基本的には次のようになります。Sphero と 2 つの壁がある現実の世界で、添付の画像に示されていることを達成できますか?
本当にありがとう。