三维坐标旋转矩阵推导过程以及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语言实现,对于学习计算机图形学、机器人学等领域的读者具有较高的参考价值。本文原文来自博客园。
热门推荐
轿车拖挂房车需要什么驾驶证
云南烟丝发酵与醇化
经济诈骗如何定性
不动产权证可以代替土地使用证吗
福州大学081401岩土工程专业硕士研究生招生目录
马王爷是谁?历史上流传着哪些传说?
厌氧菌和需氧菌感染区别在哪
漫游外滩,体验历史文化风貌区的Citywalk路线
感冒的过程及症状变化
公猫绝育后乱尿怎么办?原因分析与解决方案
是研究生被冷落了吗?国考近1/6职位仅限本科,而仅限研究生仅3%
HR必读:人效与人均产值的本质区别及落地应用指南
天津种植牙集采政策实施情况如何,未来种植牙价格会降低吗?
萎缩性胃炎能吃什么饼干
鸭子炖汤的最佳搭配食材,让你越吃越健康
全新养老生活,旅居时代的幸福选择
手部小动作泄露你的心理秘密
喷气增焓技术:突破低温极限的中央空调高效制热新方案
煤气罐的安装步骤是什么?这种安装如何确保使用安全?
经什么意思:从法律角度解析其深刻寓意与应用
茯苓酸枣仁茶的功效和作用 茯苓酸枣仁茶不适宜人群
笔记本电脑无响应怎么强制重启
东北酸菜真的会致癌吗?专家解读酸菜食用安全指南
什么是锂电池热失控?
亲水PTFE过滤膜的材料优势与孔径结构
缺铁性贫血患者如何正确补充铁剂?
英雄联盟电竞经理EDG阵容搭配攻略
普洱茶汤怎么也会“出油”?
总是感觉饿是什么原因引起的
降价不降质,让更多癌症患者用得起化疗药