gpt4 book ai didi

java - Atan 返回 0,但不返回 180

转载 作者:行者123 更新时间:2023-11-30 02:08:25 26 4
gpt4 key购买 nike

所以我想获得2点之间的度数,但是当我希望它返回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.atan2而不是Math.atanMath.atan 返回 -π/2 到 π/2 范围内的值(即 -90° 到 90°)。这是因为它需要 yx 的符号来计算 4 个象限中的正确象限,这也是 atan2 采用 yx 作为单独的参数。

(换句话说,给定一些 yx-y/x == y/-xatan2 将它们分开,这样就可以消除这样的情况的歧义。)

另请参阅What is the difference between atan and atan2 in C++?了解更多信息。 (其中的原则也适用于 Java。)

顺便说一句,数学中的三角方法通常以弧度进行运算。如果您使用度数,则需要进行转换。

关于java - Atan 返回 0,但不返回 180,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50779886/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com