gpt4 book ai didi

java - 计算两个未知点之间的俯仰和偏航

转载 作者:行者123 更新时间:2023-11-30 07:14:57 25 4
gpt4 key购买 nike

我一直在处理 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 在运行时之前都是未知的,此时它们是从两个随机生成的点收集的。

但出于某种原因,我的结果完全错误,我尝试了许多不同的组合并在 google 上搜索了无数东西,但一无所获。

一些约束是:

  1. Pitch 只能小于或等于 90,或大于或等于 -90 (90 => pitch => -90)
  2. 从来没有滚动所以不适用
  3. 在程序中声明之前,所有坐标都是未知的
  4. 俯仰沿Z轴开始,向前/向后,向上俯仰为正
  5. Y 向上,Z 向前/向后,X 向侧面
  6. 偏航开始直接面向 Z 轴

这是我第一次使用 3D 角度,我读到可以在两个不同的 2D 平面上分别计算俯仰和偏航,就像我的示例一样,但这行不通。

非常感谢任何帮助。

最佳答案

也许这会对你有所帮助。这是 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;

如果你需要一个 vector ,那么这样做:

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);

Original Tutorial

基本上计算应该是一样的。如果对您没有帮助,我很抱歉!

关于java - 计算两个未知点之间的俯仰和偏航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18184848/

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