matlab实现欧拉旋转动画

% function Visual_Rotate(angle)
%功能:查看旋转后的坐标系与参考坐标系的位置关系,

% 输入:3-1-2旋转关系的三个角。注意是3-1-2;

% 输入旋转角度(单位:弧度)
%关键点:把旋转后的坐标轴向量的值,再投影回参考坐标系。
% 已验证


% theta3=angle(1);
% theta1=angle(2);
% theta2=angle(3);

[pi/4,pi/4,pi/4]
theta3 = pi/4; % 绕Z轴的旋转角
theta1 = pi/4; % 绕X轴的旋转角
theta2 = pi/4; % 绕Y轴的旋转角

% 定义旋转矩阵:
Rz = [cos(theta3), sin(theta3), 0;
      -sin(theta3),  cos(theta3), 0;
      0,           0,           1];

Rx = [1, 0,          0;
      0, cos(theta1), sin(theta1);
      0, -sin(theta1),  cos(theta1)];

Ry = [cos(theta2), 0, -sin(theta2);
      0,          1, 0;
      sin(theta2), 0, cos(theta2)];

% 组合旋转矩阵(注意旋转的顺序)
R =  Rz'* Rx' *Ry' ;


% 旋转后的新坐标系基向量在新坐标系的投影
i = [1; 0; 0]; % X轴
j = [0; 1; 0]; % Y轴
k = [0; 0; 1]; % Z轴

% 计算旋转后的新坐标系基向量在 原坐标系的投影(坐标)。
% (为了和原来的坐标系进行视觉对比!)
i_new = R * i;
j_new = R * j;
k_new = R * k;

% 绘制原始坐标系
figure;
quiver3(0, 0, 0, i(1), i(2), i(3), 'r', 'LineWidth', 2);
hold on;
quiver3(0, 0, 0, j(1), j(2), j(3), 'g', 'LineWidth', 2);
quiver3(0, 0, 0, k(1), k(2), k(3), 'b', 'LineWidth', 2);

% 绘制旋转后的新坐标系
quiver3(0, 0, 0, i_new(1), i_new(2), i_new(3), 'r--', 'LineWidth', 2);
quiver3(0, 0, 0, j_new(1), j_new(2), j_new(3), 'g--', 'LineWidth', 2);
quiver3(0, 0, 0, k_new(1), k_new(2), k_new(3), 'b--', 'LineWidth', 2);


% 设置图形属性
axis equal;
grid on;
xlabel('X');
ylabel('Y');
zlabel('Z');
title('3-1-2 Rotation Sequence of Coordinate System');
legend({'Original X', 'Original Y', 'Original Z', 'Rotated X', 'Rotated Y', 'Rotated Z'}, 'Location', 'northeastoutside');

hold off;
% end
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值