Java Atan返回0,但不是180
所以我想得到两点之间的度数,但当我想它返回180时,它返回0。。。0、90和270确实有效,但当其值为180时返回0。。这是我的代码:Java Atan返回0,但不是180,java,math,bukkit,Java,Math,Bukkit,所以我想得到两点之间的度数,但当我想它返回180时,它返回0。。。0、90和270确实有效,但当其值为180时返回0。。这是我的代码: Location loc1 = new Location(Bukkit.getWorld("world"), 1, 0, 0); Location loc2 = new Location(Bukkit.getWorld("world"), -1, 0, 0); float pitch = Utils.yawpitch(loc1, loc2).getPitch(
Location loc1 = new Location(Bukkit.getWorld("world"), 1, 0, 0);
Location loc2 = new Location(Bukkit.getWorld("world"), -1, 0, 0);
float pitch = Utils.yawpitch(loc1, loc2).getPitch();
public static Location yawpitch(Location loc, Location toloc) {
loc = loc.clone();
double x = toloc.getX() - loc.getX();
double y = toloc.getY() - loc.getY();
double z = toloc.getZ() - loc.getZ();
double dxz = Math.sqrt(Math.pow(x, 2) + Math.pow(z, 2));
loc.setPitch((float) -Math.atan(y / dxz));
loc.setPitch(loc.getPitch() * 180f / (float) Math.PI);
return loc;
}
我的第一个点在左边,第二个点在右边,所以应该是180,但这将返回“0”。看起来你想要的是使用而不是
Math.atan
返回一个介于-π/2到π/2(即-90°到90°)之间的值。这是因为它需要y
和x
的符号来计算4中的正确象限,这也是atan2
将y
和x
作为单独参数的原因
(换句话说,给定一些y
和x
,-y/x==y/-x
atan2
将它们分开,以便消除类似情况的歧义。)
有关更多信息,请参见。(这些原则也适用于Java。)
作为旁注,Math
中的三角法通常以弧度计算。如果使用度,则需要进行转换