Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Atan返回0,但不是180_Java_Math_Bukkit - Fatal编程技术网

Java Atan返回0,但不是180

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(

所以我想得到两点之间的度数,但当我想它返回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();


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
中的三角法通常以弧度计算。如果使用度,则需要进行转换