我还没有标记这个问题为已回答。
当前被接受的答案是因为赏金限时自动接受的。
关于我正在开发的编程游戏this programming game。
从上面的链接可以看出,我正在开发一个游戏,在这个游戏中,用户可以编写程序,使机器人在竞技场中自主作战。
现在,我需要一种方法来检测机器人是否以特定的角度(取决于炮塔面向的方向)检测到另一个机器人:
如上图所示,我绘制了坦克的视角,现在我需要在我的游戏中模拟它,以检查其中的每个点,看看是否有其他机器人在视野范围内。
这些机器人只是不断在战斗竞技场(另一个画布)上移动的画布。
我知道炮塔的朝向(它当前面向的方向),并且需要找出是否有任何机器人在其路径上(路径应以“视点”方式定义,在上图中以红色“三角形”的形式呈现)。我希望该图像可以更清楚地说明我试图传达的内容。
我希望有人能指导我如何解决这个问题涉及的数学问题。
[更新]
我已经尝试了你告诉我的计算方法,但是它并没有正常工作,因为如你所见,Bot1 不应该能看到 Bot2。以下是一个例子:
alt text http://img12.imageshack.us/img12/7416/examplebattle2.png
在上述情况下,Bot1 正在检查他是否能看到 Bot2。根据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,但从图像中可以看出这是不可能的,因为它们面对着不同的方向。在上述计算中我做错了什么?