この質問にはまだ回答済みのマークを付けていません。
現在承認されている回答は、報奨金の時間制限のために自動的に承認されました
このプログラミングゲームを参考に、現在制作中です。
上記のリンクからわかるように、私は現在、ユーザーがプログラム可能なロボットがアリーナで自律的に戦うゲームを構築しています。
ここで、ロボットが特定の角度で別のロボットを検出したかどうかを検出する方法が必要です (タレットがどこを向いているかによって異なります)。
代替テキスト http://img21.imageshack.us/img21/7839/robotdetectionrg5.jpg
上の画像からわかるように、ゲーム内でエミュレートする必要がある戦車の一種の視点を描画しました。その各ポイントをチェックして、別のロボットが視野内にあるかどうかを確認します。
ボットは、バトル アリーナ (別のキャンバス) で常に翻訳されている単なるキャンバスです。
タレットの方向 (現在向いている方向) を知っているので、そのパスにボットがいるかどうかを確認する必要があります (パスは、「視点」のような方法で定義する必要があります。上の赤い「三角形」の画像. この画像が、私が伝えようとしていることをより明確にしてくれることを願っています.
誰かがこの問題を達成するためにどのような数学が関係しているかを教えてくれることを願っています.
[アップデート]
教えていただいた計算を試してみましたが、正しく機能していません。画像からわかるように、 bot1 は Bot2 を見ることができないはずです。例を次に示します。
代替テキスト http://img12.imageshack.us/img12/7416/examplebattle2.png
上記のシナリオでは、ボット 1 はボット 2 が見えるかどうかを確認しています。詳細は次のとおりです ( Waylon Flinn の回答によると):
angleOfSight = 0.69813170079773179 //in radians (40 degrees)
orientation = 3.3 //Bot1's current heading (191 degrees)
x1 = 518 //Bot1's Center X
y1 = 277 //Bot1's Center Y
x2 = 276 //Bot2's Center X
y2 = 308 //Bot2's Center Y
cx = x2 - x1 = 276 - 518 = -242
cy = y2 - y1 = 308 - 277 = 31
azimuth = Math.Atan2(cy, cx) = 3.0141873380511295
canHit = (azimuth < orientation + angleOfSight/2) && (azimuth > orientation - angleOfSight/2)
= (3.0141873380511295 < 3.3 + 0.349065850398865895) && (3.0141873380511295 > 3.3 - 0.349065850398865895)
= true
上記の計算によると、Bot1 は Bot2 を見ることができますが、画像からわかるように、それらは異なる方向を向いているため、それは不可能です。
上記の計算で何が間違っていますか?