gpt4 book ai didi

java - atan(location1 - location2) 返回错误值

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

我正在尝试计算一个实体观看另一个实体时必须观察的角度。

l是第一个实体的位置。

o是另一个实体的位置。

每个实体在 3D 空间中都有一个 3D X、Y 和 Z 坐标。

我目前使用 double angXZ = Math.toDegrees(Math.atan2(((l.getZ()) - o.getZ()), ((l.getX()) - o.getX()))); 正确地将 X 和 Z 计算为度数。

但是,当我尝试将 Y 转换为度数时,它给出的读数完全错误。

我目前正在尝试使用 double angY = Math.toDegrees(Math.atan(l.getY() - o.getY()));获取两个 Y 坐标之间的角度(以度为单位),但它似乎不起作用。

为什么不呢?这里出了什么问题?我该如何解决它?

最终目标是能够逐步遍历第一个实体和第二个实体之间的所有坐标,并检查其间是否存在任何对象。

例如,Math.toDegrees(Math.atan(51 - 50));等于 58,这显然不正确。

最佳答案

据我了解,您正在尝试计算 (1) 通过点 lo 的线与 (2) XZ- 之间的角度飞机。我们将 Y 方向称为垂直方向。那么您将需要两条信息:从 lo 的水平距离(即投影到 XZ 平面后两点之间的距离) ),以及从 lo 的垂直距离(Y 坐标之差)。就目前情况而言,看起来您似乎正在尝试仅根据垂直差来计算角度。这显然是有问题的:两点之间的高度差不足以确定您所追求的角度。

您需要的水平差异可以使用 Math.hypot 以及 X 和 Z 坐标的差异来计算。因此,计算角度的代码将如下所示:

/* Compute the components of the vector from o to l. */
double diffX = l.getX() - o.getX();
double diffY = l.getY() - o.getY();
double diffZ = l.getZ() - o.getZ();

/* Find the horizontal distance from o to l (assuming that
Y is the vertical direction. */
double distXZ = Math.hypot(diffX, diffZ);

/* Compute the angle in degrees using the vertical distance
and the horizontal distance. */
double pitch = Math.toDegrees(Math.atan2(diffY, distXZ));

关于java - atan(location1 - location2) 返回错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31033213/

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