建立一个雷达

时间:2012-12-08 17:39:43

标签: java math vector angle

我想尝试在Java OpenGL中构建一个雷达。基本上在该方法中,您传递玩家的当前位置,玩家面对的角度和敌人的位置。如果敌人正前方,红点(象征敌人)应位于圆圈的顶部(雷达),可以说是0度。如果直接在右边,红点将是90度等等。基本上,我试图找到直接在玩家面前射出的矢量和从玩家到敌人的矢量之间的角度。我到底该怎么做呢?我环顾四周,找到了atan2()的建议,但还不确定如何使用它。如果有更快捷,更有效的方式,请告诉我。

编辑:我使用绘制点而不是点积和余弦等的方法,我使用玩家的位置作为原点。但是如果距离大于使用距离公式所选的数字70,我将如何使敌人的点出现在雷达的边缘?任何小于70的东西都在雷达之内,但是任何超过70的敌人,我都希望敌人只是绕着雷达的边缘盘旋,而不是让敌人的点消失。

2 个答案:

答案 0 :(得分:1)

假设您的玩家和敌人在某些2D空间(或者甚至是3D空间,但是它们在2D平面上移动,例如水平地面)上用坐标表示,我认为更简单的方法就是直接映射到玩家/敌方实体在雷达上的位置,然后根据玩家当前面对真正北方的角度,在玩家作为原点的雷达上应用旋转变换。

答案 1 :(得分:1)

如果使用向量,则可以使用两个向量的点积等于其大小的乘积和它们之间角度的余弦的属性:

u . v = |u| |v| cos(theta)

u是你的玩家的方向,而v是从你的玩家到敌人的向量。

您正在寻找theta,所以您只需要使用:

theta = acos((v . u) / (|v| |u|))

请注意,这只会给你角度,而不是左边还是右边。为了找到这一点,我们可以采用交叉产品,看看它是正面的还是负面的:

is_left = |u X v| < 0