三维坐标旋转矩阵推导过程以及C语言实现
创作时间:
作者:
@小白创作中心
三维坐标旋转矩阵推导过程以及C语言实现
引用
1
来源
1.
https://www.cnblogs.com/shumei52/p/18604930
三维坐标旋转矩阵是计算机图形学、机器人学等领域中的重要基础概念。本文从二维坐标点的旋转开始,逐步推导出三维坐标点绕X、Y、Z轴的旋转矩阵,并给出了C语言实现代码。
本文的前提假设如下:
- 坐标系采用右手坐标系
- 角度逆时针旋转为正
- 绕X轴旋转角度为俯仰角(Pitch)
- 绕Y轴旋转角度为偏航角(Yaw)
- 绕Z轴旋转角度为翻滚角(Roll)
1. 平面二维坐标点的旋转
根据三角函数关系,可以列出向量OP与OP'的坐标表示形式:
x = |OP|•cosα
y = |OP|•sinα
x′ = |OP|•cos(α+β)
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β
为方便运算理解,我们将二维点旋转表示为矩阵:
2. 立体三维坐标点的旋转
绕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
为方便运算理解,我们将三维点旋转表示为矩阵:
绕Y轴旋转
绕X轴旋转
绕三轴旋转(先绕x,再绕y,最后绕z轴旋转)
整理后的表达式为:
3. 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);
4. 与SDL实现旋转的矩形
本文介绍了三维坐标旋转矩阵的推导过程和C语言实现,对于学习计算机图形学、机器人学等领域的读者具有较高的参考价值。本文原文来自博客园。
热门推荐
外来游客来香港旅游的全面指南
菠萝蜜和鱼能一起吃吗
阿莫西林能和布洛芬缓释胶囊一起吃吗
Web发展史:从阿帕网到智能化未来
看完恐怖片睡不着?七种实用方法帮你缓解恐惧,安然入睡
胆心综合征:从发病机制到治疗方案的全面解析
雷军在《新闻联播》中紧张搓手:一毕业就做老板,怎么向上汇报啊
秦国律法到底有多完善?一文带你全面了解睡虎地秦简中的秦律
偏瘫后肩关节半脱位的预防和治疗
风暴眼中飘渺的蜀汉
冬天千万别用这种杯子喝热水,可能会“炸嘴”!这几样东西趁着新年也赶紧扔掉→
女性长期单身的危害有哪些
男权思想:男性不承担责任的观念根源及其影响
通过城市体检评估制度全面系统评价我国城市人居环境建设
城市体检与更新规划衔接技术难点与应对策略
失信人对家人子女的影响及如何解除失信身份
不懂《真需求》,你永远赚不到大钱
机构对比特币的需求激增,而散户情绪则滞后
孙悟空成佛之后顿悟,自己为何能够成佛!菩提老祖早已埋下伏笔!
2025我国高校前10强排名调整:国科大跻身前3,华科大逼近南大
如何理解汇率市场并进行合理投资?这种汇率投资有哪些风险和机遇?
电影市场开门红!2025年春节档电影票房超95亿元
怎样检测睡眠呼吸障碍综合征
英雄联盟手游国际服提升体验,帧率设置及优化技巧分析
AC米兰球员国家队比赛表现喜忧参半,多人出现严重体能消耗
站着办公比坐着办公更健康?真相跟你想得不一样
争议巨大的崂山白花蛇草水
前端动画抖动问题全攻略:从原理到实战
老旧小区改造提案案由:提升居民生活质量,优化社区环境
东汉的衰落与西汉的辉煌:一场王朝兴衰的历史比较