pitch yaw roll是什么

本文探讨了在游戏开发中使用欧拉角表示物体旋转的方法及其挑战,详细解释了欧拉角中的pitch、yaw和roll的概念,并通过实例展示了不同旋转顺序的影响。

关于旋转永远是做游戏的难点和混乱点。我们知道表示一个旋转有多种方式,简单的欧拉角,复杂点的四元数,再复杂点的矩阵。之前接触unity可以用四元数和欧拉角两种方式表示旋转,最近一直研究虚幻引擎,目前只看到了欧拉角这一种旋转方式。

欧拉角是表达旋转的最简单的一种方式,形式上它是一个三维向量,其值分别代表物体绕坐标系三个轴(x,y,z轴)的旋转角度。这样的话,很容易想到,同样的一个三维向量,代表了绕x,y,z的旋转值,先进行那个旋转是否对结果有影响呢?显然是有影响的,可以拿着你的手机试一下,不同的旋转顺序会代表不同的旋转结果。所以,一般引擎都会规定自己的旋转顺序。
下面三张动图形象的表示了欧拉角的旋转方式。第一张是绕x轴旋转pitch,第二张绕y轴旋转yaw,第三张是绕z轴旋转roll。
这里写图片描述
这里写图片描述
这里写图片描述

绕三个轴的旋转值pitch,yaw,roll来自航空界的叫法,翻译为俯仰角,偏航角,翻滚角,非常形象。它们不一定如上所述,一定分别代表绕x,y,z的旋转值。
从英文意思出发,roll:是卷;滚动,转动;辗的意思;
yaw是(火箭、飞机、宇宙飞船等)偏航的意思;
pitch是倾斜;投掷;搭帐篷;坠落的意思;
所以,roll的意思是翻滚,就是绕着机身所在的那个轴。yaw是偏航的意思,偏航就是绕着重力方向为轴。pitch倾斜、坠落的意思,坠落就是以翅膀所在的直线为轴发生旋转。

另外值得注意的是,pitch值是不能超过90度,这里牵扯到了万向锁的知识,不再多说,网上很多讨论。

下面这张图是以摄像机的角度来阐述欧拉角的,可以加深理解。可以看到,pitch,yaw,roll在这里并不是常见的代表绕x,y,z的旋转值。
这里写图片描述

转载于:https://www.cnblogs.com/zhoug2020/p/7636588.html

要计算右手腕的Pitch Yaw Roll,您需要使用MediaPipe框架提供的手部关键点检测模型。MediaPipe是一个开源的跨平台框架,可以用于构建基于机器学习的应用程序,包括手部姿势估计。 以下是计算右手腕Pitch Yaw Roll的C++代码片段: ```c++ // 加载MediaPipe手部关键点检测模型 mediapipe::Hands hands; hands.Initialize().AssertOk(); // 读取图像并检测手部关键点 cv::Mat image = cv::imread("hand_image.jpg"); auto results = hands.Process(image).front(); // 提取右手腕的坐标 const auto& landmarks = results.landmarks(); const auto& wrist_landmark = landmarks.landmark(0); // 右手腕的索引为0 // 计算Pitch Yaw Roll const auto& norm_landmark = NormalizeLandmark(wrist_landmark); const auto& orientation = CalculateOrientation(norm_landmark); const auto& pitch_yaw_roll = ConvertToPitchYawRoll(orientation); std::cout << "Right wrist pitch: " << pitch_yaw_roll.pitch << std::endl; std::cout << "Right wrist yaw: " << pitch_yaw_roll.yaw << std::endl; std::cout << "Right wrist roll: " << pitch_yaw_roll.roll << std::endl; ``` 在上述代码中,`hands`对象是MediaPipe框架提供的手部关键点检测模型,用于检测图像中的手部关键点。`results`变量包含检测结果,其中包括检测到的所有手部关键点。 我们提取右手腕的坐标,并将其传递给`NormalizeLandmark()`函数进行归一化处理。接下来,我们将归一化后的坐标传递给`CalculateOrientation()`函数,计算手部的方向向量。最后,我们将方向向量传递给`ConvertToPitchYawRoll()`函数,计算右手腕的Pitch Yaw Roll。 请注意,上述代码片段中的`NormalizeLandmark()`、`CalculateOrientation()`和`ConvertToPitchYawRoll()`函数是伪代码,并不代表实际可用的函数。您需要编写这些函数来完成具体的计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值