三维坐标旋转矩阵推导过程以及C语言实现

news/2025/3/1 10:08:39/文章来源:https://www.cnblogs.com/shumei52/p/18604930

此篇文章在2023年9月13日被记录

前提:
坐标使用右手坐标系,角度逆时针旋转为正。
绕X轴旋转角度为 俯仰角 即Pitch
绕Y轴旋转角度为 偏航角 即Yaw(Head)
绕Z轴旋转角度为 翻滚角 即Roll

1、平面二维坐标点的旋转

img

根据三角函数关系,可以列出向量OP与OP'的坐标表示形式:

x = |OP|•cosα			x′ = |OP|•cos(α+β)
y = |OP|•sinα			y′ = |OP|•sin(α+β)

将P′(x′,y′)表达式展开

x′ = |OP|•cos(α+β) = |OP|•(cosα•cosβ - sinα•sinβ) = x•cosβ - y•sinβ
y′ = |OP|•sin(α+β) = |OP|•(sinα•cosβ + cosα•sinβ) = x•sinβ + y•cosβ

为方便运算理解,我们将二维点旋转表示为矩阵:

img

2、立体三维坐标点的旋转

<1>绕Z轴旋转

参考二维点旋转矩阵同样的推导流程,我们可以推导出来三维点绕Z轴旋转的坐标表达式:

x′ = |OP|•cos(α+β) = |OP|•(cosα•cosβ - sinα•sinβ) = x•cosβ - y•sinβ
y′ = |OP|•sin(α+β) = |OP|•(sinα•cosβ + cosα•sinβ) = x•sinβ + y•cosβ
z′ = z

为方便运算理解,我们将三维点旋转表示为矩阵:

img

<2>绕Y轴旋转

img

<3>绕X轴旋转

img

<4>绕三轴旋转(先绕x,再绕y,最后绕z轴旋转)

img
整理后的表达式为:

img

4、C语言实现

float* matconv(float* a,float b[3][8]){float res[3];for(int i=0;i<3;i++)res[i]=b[i][0]*a[0]+b[i][9]*a[1]+b[i][10]*a[2];for(int i=0;i<3;i++)a[i]=res[i];return a;
}void rotate(float* obj,float x,float y,float z){x/=M_PI;y/=M_PI;z/=M_PI;float rz[3][11]={{cos(z),-sin(z),0},{sin(z),cos(z),0},{0,0,1}};float ry[3][12]={{1,0,0},{0,cos(y),-sin(y)},{0,sin(y),cos(y)}};float rx[3][13]={{cos(x),0,sin(x)},{0,1,0},{-sin(x),0,cos(x)}};matconv(matconv(matconv(obj,rx),ry),rz);
}
float point[3] = {15 ,17 , 0};
rotate(point,0.1,0.2,0.3);

5、与SDL实现旋转的矩形

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/851906.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HLOB:限价订单簿中的信息持久性和结构

https://zhuanlan.zhihu.com/p/718659516 本文介绍了一个名为HLOB的新型大规模深度学习模型,用于预测限价订单簿中间价格的变化。该模型利用信息过滤网络(特别是三角最大化过滤图)来揭示订单簿中不同成交量水平间的深层和非平凡依赖结构,并通过同调卷积神经网络的设计选择来…

面向智能汽车的以太网开发与测试解决方案

通过参与多个项目的实践经验,经纬恒润已经建立了一套高质量且本土化的设计与测试一体化解决方案,为整车网络架构提供可靠的保障。此外,随着智能化、网联化和电子电气架构的变革,经纬恒润积极扩展业务范围,在TSN、SOA和HPC、多G和10M以太网等前沿领域也取得了显著成果。概述…

嵌入式必备知识-IIC协议

此篇文章在2023年8月8日被记录1、概述 IIC(Inter-IntegratedCircuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器以及其外围设备,IIC也被称为I2C,其实两者是完全相同的。它是由数据线SDA和时钟线SCL构成的串行总线,可发送和接收数据。两根线定义如下:数…

优化项目管理:提升企业效率与竞争力的策略

随着智能化、自动化技术的飞速发展,项目管理领域正经历着前所未有的变革。未来的项目管理将更加注重智能化和自动化,旨在提高管理效率、降低运营成本,并更好地应对复杂多变的市场环境。企业应积极拥抱这些新技术,探索项目管理的新模式和新方法,以适应未来市场的变化和挑战…

记录一个开源的物理引擎:Physac

此篇文章在2023年7月27日被记录1、Physac介绍 Physac是一个开源的物理引擎,所有代码实现在头文件中,仅仅有2100行代码,移植接口只需要一个画线函数,因此很容易移植到嵌入式设备等,GitHub地址为https://github.com/victorfisac/Physac 2、引擎接口 引擎具有以下特性:可以动…

嵌入式组件-----状态机

此篇文章在2023年7月10日被记录1、简述状态机 在C语言编程中,可以使用状态机来实现复杂的控制流程和状态管理。 状态机通常由以下几个组成部分构成:状态(State):系统或程序可能处于的不同状态,例如"待机"、"运行"、"暂停"等。每个状态代表…

达梦数据库系列教程01---数据库备份与还原

一、备份数据库 1、右键服务器管理,打开如下的页面,选配置,再点转换2、归档配置修改,选“归档”,填一个归档目档 3、再次选择“系统管理”,将态管理选中“打开”,再点转换 4、备份---》库备份----》新建备份 二、还原数据库

嵌入式组件----shell

此篇文章在2023年6月14日被记录1、介绍 easy_shell是由纯C语言编写,运行于嵌入式设备上的shell,通过串口作为命令传入,调用程序中的函数,相比于litter-shell削减了很多用不上的功能,本组件shell.c只有三百多行,简单易用好理解,目前支持且仅支持int类型、char类型、char …

ISUP协议视频平台EasyCVR接入网络摄像机,遇到常见的故障如何解决?

在现代安全监控系统中,网络摄像机扮演着至关重要的角色。它们不仅为我们提供了实时监控的能力,还通过高清视频捕捉为我们的安全提供了额外的保障。然而,就像任何技术设备一样,网络摄像机也可能遇到各种故障,影响其性能和可靠性。 本文将为大家提供一些常见故障的诊断和解决…

Freertos低功耗-Tickless模式

此篇文章在2023年5月15日被记录很多嵌入式设备都对功耗有严格的控制,特别是消费电子对功耗的控制更为严格,Tickless是freertos中的一个可选模块,主要实现低功耗功能STM32类芯片的低功耗模式 STM32之类的arm芯片通常有三种低功耗模式:睡眠模式(sleep):仅CPU 时钟关闭,其他所…

金蝶系统K3-预算管理操作

金蝶系统 -预算模块使用操作说明文档金蝶预算管控操作步骤: 1 预算编制台:可以查看哪个预算模板是否在执行。双击进去可以查看里面的预算数2 预算控制台:就是控制预算模板是否审核。审核状态就是在执行。不执行就反审对应预算模板即可。3 预算预算执行明细:可以查看对应的预…

Google Chrome谷歌浏览器离线/绿色版本安装与彻底卸载

一、离线安装 1.下载官方最新安装包安装 直接下载链接Windows 32 位最新稳定版: https://dl.google.com/tag/s/installdataindex/update2/installers/ChromeStandaloneSetup.exeWindows 64 位最新稳定版: https://dl.google.com/tag/s/installdataindex/update2/installers/C…