我一直在使用3D空间中的点(X,Y,Z),并希望能够计算其中两个点之间的俯仰和偏航。
我目前的代码:
pitch = (float) (1/Math.tan((Y1 - Y2) / (Z1 - Z2)));
yaw = (float) (1/Math.tan((X1 - X2) / (Z1 - Z2)));
其中X1,X2,Y1,Y2,Z1,Z2在运行时都是未知的,此时它们是从两个随机生成的点中收集的。
出于某种原因,我的结果是完全错误的,我尝试了许多不同的组合并搜索了无数的东西,但没有提出任何结果。
一些限制因素是:
这是我第一次使用3D角度,我已经读过,可以单独计算俯仰和偏航,如我的例子所示,在两个不同的2D平面上,但这不起作用。
任何帮助都非常感激。
答案 0 :(得分:4)
也许这会对你有所帮助。这是一个由 LucasEmanuel 开发的教程,它是对Minecraft的俯仰,偏航计算,但它也应该对你有用!
首先,你必须计算delta x,y,z:
double dX = first_location.getX() - second_location.getX();
double dY = first_location.getY() - second_location.getY();
double dZ = first_location.getZ() - second_location.getZ();
之后你必须计算偏航:
double yaw = Math.atan2(dZ, dX);
和它的音调:
double pitch = Math.atan2(Math.sqrt(dZ * dZ + dX * dX), dY) + Math.PI;
如果您需要矢量,请执行以下操作:
double X = Math.sin(pitch) * Math.cos(yaw);
double Y = Math.sin(pitch) * Math.sin(yaw);
double Z = Math.cos(pitch);
Vector vector = new Vector(X, Z, Y);
基本上计算应该是相同的。 如果它没有帮助你,我很抱歉!