我正在编写Minecraft Bukkit插件,需要一种方法来计算从0到360的输入数字,以显示自定义指南针。因此,如果玩家直接查看对象(不应该处理查看高度或位置高度),则此数字将为0,如果玩家的背部正在查看对象,则该数字将为180.
我已经成功计算了我需要的两个数字:
玩家的绝对视角。当玩家向北看,180向南看时为0。
玩家位置与物体位置之间的位置角度。使用Math.atan2获取这些位置的[X,Z]之间的角度。
两个值似乎都是正确计算的。但我不知道该怎么做才能得到我最初描述的数字。尝试减法,补充。有什么想法吗?
答案 0 :(得分:0)
它们应该是它们之间的差异 - 如果玩家向北看,并且物体delta x,delta z给出45度的方位,那么针应该在45°(= 45-0)的前方和右方),如果玩家向南看,而对象x,z是45,那么针应该在225或-135(= 45-180)后面和左边。
检查您是否已将Math.atan2的结果转换为度数,因此您将以相同的单位减去值,并且轴约定是一致的。 This说+ ve x轴是东,+ ve轴是南。方位为0,北方由atan2(0,1)给出,这意味着你应该使用Math.toDegrees(Math.atan2(deltaX, -deltaZ))
来获得方位。
在做这些事情时,可以更容易地编写六个单元测试来覆盖案例,并使用符号来查看效果是什么。