How to convert Euler angles to directional vector?(如何将欧拉角转换为方向向量?)
问题描述
我有俯仰角、滚转角和偏航角.我如何将这些转换为方向向量?
如果你能向我展示这个的四元数和/或矩阵表示会特别酷!
不幸的是,关于如何定义这些东西有不同的约定(并且滚转、俯仰、偏航与欧拉角并不完全相同),因此您将有小心点.
如果我们将pitch=0定义为水平(z=0),yaw定义为从x轴逆时针,那么方向向量将为
<前>x = cos(yaw)*cos(pitch)y = sin(yaw)*cos(pitch)z = sin(音高)注意我没有用过roll;这是方向单位向量,它不指定姿态.编写一个旋转矩阵很容易,它可以将物体带入飞行物体的框架中(如果你想知道,比如说,左翼尖指向哪里),但首先指定约定确实是一个好主意.你能告诉我们更多关于这个问题的信息吗?
(两年半来我一直想回到这个问题.)
对于完整的旋转矩阵,如果我们使用上面的约定并且我们希望向量先偏航,然后是俯仰,然后是滚动,为了获得世界坐标系中的最终坐标,我们必须在世界坐标系中应用旋转矩阵逆序.
第一卷:
<代码>|1 0 0 ||0 cos(roll) -sin(roll) ||0 sin(roll) cos(roll) |
然后投球:
<代码>|cos(pitch) 0 -sin(pitch) ||0 1 0 ||sin(pitch) 0 cos(pitch) |
然后偏航:
<代码>|cos(yaw) -sin(yaw) 0 ||sin(yaw) cos(yaw) 0 ||0 0 1 |
将它们组合起来,总的旋转矩阵为:
<代码>|cos(yaw)cos(pitch) -cos(yaw)sin(pitch)sin(roll)-sin(yaw)cos(roll) -cos(yaw)sin(pitch)cos(roll)+sin(yaw)sin(卷)||sin(yaw)cos(pitch) -sin(yaw)sin(pitch)sin(roll)+cos(yaw)cos(roll) -sin(yaw)sin(pitch)cos(roll)-cos(yaw)sin(卷)||sin(pitch) cos(pitch)sin(roll) cos(pitch)sin(roll)|
因此对于从 x 轴开始的单位向量,最终坐标将为:
x = cos(yaw)cos(pitch)y = sin(yaw)cos(pitch)z = sin(音高)
对于从 y 轴(左翼尖)开始的单位向量,最终坐标将为:
x = -cos(yaw)sin(pitch)sin(roll)-sin(yaw)cos(roll)y = -sin(yaw)sin(pitch)sin(roll)+cos(yaw)cos(roll)z = cos(pitch)sin(roll)
I have pitch, roll, and yaw angles. How would I convert these to a directional vector?
It'd be especially cool if you can show me a quaternion and/or matrix representation of this!
Unfortunately there are different conventions on how to define these things (and roll, pitch, yaw are not quite the same as Euler angles), so you'll have to be careful.
If we define pitch=0 as horizontal (z=0) and yaw as counter-clockwise from the x axis, then the direction vector will be
x = cos(yaw)*cos(pitch) y = sin(yaw)*cos(pitch) z = sin(pitch)
Note that I haven't used roll; this is direction unit vector, it doesn't specify attitude. It's easy enough to write a rotation matrix that will carry things into the frame of the flying object (if you want to know, say, where the left wing-tip is pointing), but it's really a good idea to specify the conventions first. Can you tell us more about the problem?
EDIT: (I've been meaning to get back to this question for two and a half years.)
For the full rotation matrix, if we use the convention above and we want the vector to yaw first, then pitch, then roll, in order to get the final coordinates in the world coordinate frame we must apply the rotation matrices in the reverse order.
First roll:
| 1 0 0 |
| 0 cos(roll) -sin(roll) |
| 0 sin(roll) cos(roll) |
then pitch:
| cos(pitch) 0 -sin(pitch) |
| 0 1 0 |
| sin(pitch) 0 cos(pitch) |
then yaw:
| cos(yaw) -sin(yaw) 0 |
| sin(yaw) cos(yaw) 0 |
| 0 0 1 |
Combine them, and the total rotation matrix is:
| cos(yaw)cos(pitch) -cos(yaw)sin(pitch)sin(roll)-sin(yaw)cos(roll) -cos(yaw)sin(pitch)cos(roll)+sin(yaw)sin(roll)|
| sin(yaw)cos(pitch) -sin(yaw)sin(pitch)sin(roll)+cos(yaw)cos(roll) -sin(yaw)sin(pitch)cos(roll)-cos(yaw)sin(roll)|
| sin(pitch) cos(pitch)sin(roll) cos(pitch)sin(roll)|
So for a unit vector that starts at the x axis, the final coordinates will be:
x = cos(yaw)cos(pitch)
y = sin(yaw)cos(pitch)
z = sin(pitch)
And for the unit vector that starts at the y axis (the left wing-tip), the final coordinates will be:
x = -cos(yaw)sin(pitch)sin(roll)-sin(yaw)cos(roll)
y = -sin(yaw)sin(pitch)sin(roll)+cos(yaw)cos(roll)
z = cos(pitch)sin(roll)
这篇关于如何将欧拉角转换为方向向量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何将欧拉角转换为方向向量?
基础教程推荐
- Windows Media Foundation 录制音频 2021-01-01
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01
- 管理共享内存应该分配多少内存?(助推) 2022-12-07
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01
- 为什么语句不能出现在命名空间范围内? 2021-01-01
- 使用从字符串中提取的参数调用函数 2022-01-01
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01
- 从 std::cin 读取密码 2021-01-01