1

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

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

4

2 回答 2

1

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

于 2012-12-08T17:48:31.543 回答
1

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

你。v = |u| |v| 余弦(θ)

u你的玩家的方向在哪里,v是从你的玩家到敌人的矢量。

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

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

请注意,这只会给您角度,而不是向左还是向右。为了找到它,我们可以取叉积,看看它是正还是负:

is_left = |u X v| < 0

于 2012-12-08T17:48:32.950 回答