我尚未将此问题标记为已回答。
由于赏金时间限制,当前接受的答案被自动接受
参考我目前正在构建的这个编程游戏。
正如您从上面的链接中看到的那样,我目前正在构建一个用户可编程机器人在竞技场中自主战斗的游戏。
现在,我需要一种方法来检测机器人是否在特定角度检测到另一个机器人(取决于炮塔可能面向的位置):
替代文字 http://img21.imageshack.us/img21/7839/robotdetectionrg5.jpg
从上图中可以看出,我已经绘制了一种坦克的视角,现在我需要在游戏中模拟它,以检查其中的每个点以查看是否有另一个机器人在视野中。
机器人只是在战斗竞技场(另一幅画布)上不断翻译的画布。
我知道炮塔的朝向(它当前面对的方向),因此,我需要找到它的路径中是否有任何机器人(并且路径应该以“视点”方式定义,如上面的图片以红色“三角形”的形式出现。我希望这张图片能更清楚地表达我想要表达的意思。
我希望有人可以指导我解决这个问题所涉及的数学。
[更新]
我已经尝试了您告诉我的计算,但它无法正常工作,因为从图像中可以看出, bot1 不应该能够看到 Bot2 。这是一个例子:
替代文字 http://img12.imageshack.us/img12/7416/examplebattle2.png
在上述场景中,Bot 1 正在检查他是否可以看到 Bot 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,但是从图片中可以看出,这是不可能的,因为它们面向不同的方向。
我在上述计算中做错了什么?