矩阵旋转 C++

将矩阵按顺时针旋转90度,逆时针旋转90度,和旋转180度。

#include "stdio.h"
void main()
{
 int a[5][6]={1,2,3,4,5,6,
    2,3,8,9,2,5,
    2,9,7,9,4,8,
    6,3,8,1,9,3,
    9,3,5,2,8,5,};
    int s90[6][5],N90[6][5],s180[5][6];
 printf("顺时针旋转90度矩阵为:\n");
 for(int i=0;i<6;i++)
 {
  for(int j=0;j<5;j++)
  {
   s90[i][j]=a[4-j][i];
   printf("%2d%",s90[i][j]);
  }
  printf("\n");
 }
 printf("逆时针旋转90度矩阵为:\n");
 for(int i=0;i<6;i++)
 {
  for(int j=0;j<5;j++)
  {
   N90[i][j]=a[j][5-i];
   printf("%2d%",N90[i][j]);
  }
  printf("\n");
 }
 printf("旋转180度矩阵为:\n");
 for(int i=0;i<5;i++)
 {
  for(int j=0;j<6;j++)
  {
   s180[i][j]=a[4-i][5-j];
   printf("%2d%",s180[i][j]);
  }
  printf("\n");
 }
}
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
欧拉角分解旋转矩阵是将旋转矩阵分解为三个绕不同轴向旋转的角的过程。在C++中,可以使用以下代码实现: ```c++ #include <iostream> #include <cmath> using namespace std; // 定义旋转矩阵 typedef double Matrix[3][3]; // 定义欧拉角 typedef double Euler[3]; // 将欧拉角转换为旋转矩阵 void euler2matrix(const Euler &euler, Matrix &matrix) { double cx = cos(euler[0]); double sx = sin(euler[0]); double cy = cos(euler[1]); double sy = sin(euler[1]); double cz = cos(euler[2]); double sz = sin(euler[2]); matrix[0][0] = cz * cy; matrix[0][1] = sz * cy; matrix[0][2] = -sy; matrix[1][0] = cz * sy * sx - sz * cx; matrix[1][1] = sz * sy * sx + cz * cx; matrix[1][2] = cy * sx; matrix[2][0] = cz * sy * cx + sz * sx; matrix[2][1] = sz * sy * cx - cz * sx; matrix[2][2] = cy * cx; } // 将旋转矩阵分解为欧拉角 void matrix2euler(const Matrix &matrix, Euler &euler) { euler[1] = asin(-matrix[0][2]); double cy = cos(euler[1]); if (fabs(cy) > 1e-6) { euler[0] = atan2(matrix[1][2] / cy, matrix[2][2] / cy); euler[2] = atan2(matrix[0][1] / cy, matrix[0][0] / cy); } else { euler[0] = atan2(-matrix[2][1], matrix[1][1]); euler[2] = 0; } } // 输出欧拉角 void print_euler(const Euler &euler) { cout << "Yaw: " << euler[0] << " Pitch: " << euler[1] << " Roll: " << euler[2] << endl; } int main() { Matrix matrix; Euler euler = {0, 0, 0}; // 将欧拉角转换为旋转矩阵 euler2matrix(euler, matrix); // 输出旋转矩阵 cout << "Rotation matrix:" << endl; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { cout << matrix[i][j] << " "; } cout << endl; } // 将旋转矩阵分解为欧拉角 matrix2euler(matrix, euler); // 输出欧拉角 cout << "Euler angles:" << endl; print_euler(euler); return 0; } ``` 此代码将欧拉角和旋转矩阵定义为结构体,并提供了将欧拉角转换为旋转矩阵和将旋转矩阵分解为欧拉角的函数。主函数中将欧拉角初始化为0,并输出生成的旋转矩阵和分解出的欧拉角。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

gz7seven

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

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

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

打赏作者

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

抵扣说明:

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

余额充值