2d 3d旋转和平移的矩阵分析

这里我对矩阵的转置和乘积不再过多赘述了

矩阵转置就是对矩阵的行和列进行翻转得到一个新的矩阵。

矩阵乘积 首先要满足第一个矩阵的行数 等于第二个矩阵的列数,然后可以进行乘法运算。

在这里插入图片描述

2d 和 3d旋转


先来介绍2d的旋转矩阵的计算方式

点(x,y)=>得到新的坐标位置 (x*Cos(a) - y*Sin(a) , x*Sin(a) + y*Cos(a))

3d的旋转矩阵的计算方式

3d的旋转矩阵的计算方式就是绕着某一个轴进行旋转,该轴对应的行和列 均为0,相交点为1。

绕着z轴旋转的矩阵就是2d旋转矩阵。


 

 

学习内容:2d 和 3d平移

2d的平移矩阵的计算方式


由于我们知道在矩阵中单位矩阵 和任何矩阵相乘都等于自己,位置点的平移可以用矩阵这个方式进行实现,简单的来说 x 和 y 都加上自己的平移距离即可。

3d的平移矩阵的计算方式

3d平移的矩阵计算方式类似于2d平移的计算方式。


 

 

2d和3d旋转平移结合的矩阵实现方式

如果我们既要绕着某一个轴旋转 ,还要对该点进行一个偏移,那我们可以对旋转矩阵和平移矩阵进行一个相乘,得到一个新的矩阵(上图为绕着Y轴旋转,并且进行偏移的产生的新的矩阵)


在C++中,旋转平移矩阵通常用于计算机图形学中的变换操作,比如将坐标系中的点按照特定的角度和距离进行移动。如果我们要将一个二维空间等分为10份,可以创建一个表示旋转平移的4x4变换矩阵,因为4x4矩阵包含了3D旋转平移的所有信息,而我们只需要处理2D情况。 首先,我们需要知道基本的旋转矩阵(绕x轴、y轴或z轴),以及平移矩阵。对于2D平移,我们可以使用2x2的矩阵: 1. 平移矩阵(单位长度下的水平和垂直偏移): ```cpp float translateX = 0.5f; // 分割后的间距的一半 float translateY = 0.5f; float translationMatrix[2][2] = { {1, translateX}, {translateY, 1} }; ``` 2. 旋转矩阵(假设逆时针旋转90度,因为顺时针是负角度): ```cpp float rotationAngleInDegrees = 90.f; // 旋转90度 float rotationMatrix[2][2] = { {cos(rotationAngleInDegrees * M_PI / 180), -sin(rotationAngleInDegrees * M_PI / 180)}, {sin(rotationAngleInDegrees * M_PI / 180), cos(rotationAngleInDegrees * M_PI / 180)} }; ``` 然后为了得到10份等分,你可以先进行一次完整的旋转,再应用平移来达到每个分割点。这里是一个简单的示例,假设初始位置为原点(0, 0): ```cpp // 先旋转 for (int i = 0; i < 9; ++i) { float currentTranslation[2]; for (int j = 0; j < 2; ++j) currentTranslation[j] = static_cast<float>(i) * (1 / 9.0f); // 分成10份,每份是总宽度的1/9 // 结合旋转平移 float combinedMatrix[2][2] = { rotationMatrix[0][0] * currentTranslation[0] + rotationMatrix[0][1] * currentTranslation[1], rotationMatrix[1][0] * currentTranslation[0] + rotationMatrix[1][1] * currentTranslation[1], currentTranslation[0], currentTranslation[1] }; // 现在combinedMatrix就是对应的一个分割点的位置 // 可以在这里做进一步的操作,如绘制或存储坐标 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bubblingo0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值