我还没有标记这个问题.
由于Bounty Time-Limit,当前接受的答案被自动接受
参考我目前正在构建的这个编程游戏.
从上面的链接可以看出,我目前正在构建一个游戏,用户可编程机器人在竞技场中自主战斗.
现在,我需要一种方法来检测机器人是否在特定角度检测到另一个机器人(取决于炮塔可能面对的位置):
替代文字http://img21.imageshack.us/img21/7839/robotdetectionrg5.jpg
从上图中可以看出,我已经绘制了一种坦克的视角,我现在需要在游戏中模拟,以检查其中的每个点以查看是否有其他机器人在视野中.
机器人只是在战斗竞技场(另一个画布)上不断翻译的画布.
我知道炮塔的标题(它将面向当前的方式),并且我需要找到它的路径中是否有任何机器人(并且路径应该以'视点'的方式定义,如图所示)上面的图像以红色"三角形"的形式出现.我希望图像能让我的信息更加清晰.
我希望有人可以指导我实现这个问题所涉及的数学.
[UPDATE]
我已经尝试过你告诉我的计算,但它没有正常工作,因为从图像中可以看出,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,但从图像中可以看出,这是不可能的,因为它们面向不同的方向.
我在上面的计算中做错了什么?