MATLAB坐标系变换动画gif(附代码)
以之前的文章中的例题为例,绘制一个向量和一个运动坐标系在空间中的变换过程,并生成gif动画。
已知坐标系{B}的初始位姿与{A}重合,首先{B}相对于{A}的Z轴旋转30°,再沿着{A}的X轴移动1个单位,沿着{A}的Z轴移动1个单位。设初始向量P在{B}中的坐标系位置为,绘制其运动轨迹动画?
clear;clc;
close all;
%绘制向量P在空间中的变换
PB=[3 7 0];
theta=0:pi/100:pi/6;
P0=[1 0 1];
for k=1:length(theta)
%绘制初始坐标系
plot3([0,2],[0,0],[0,0],'g','LineWidth',2);%绘制x轴,两个单位长度
hold on;
plot3([0,0],[0,2],[0,0],'g','LineWidth',2);%绘制y轴,两个单位长度
plot3([0,0],[0,0],[0,2],'b','LineWidth',2);%绘制z轴,两个单位长度
R=[cos(theta(k)) -sin(theta(k)) 0;
sin(theta(k)) cos(theta(k)) 0;
0 0 1];
P0V=P0'*(k/length(theta));
PA=R*PB'+P0V;
x=PA(1);
y=PA(2);
z=PA(3);
plot3([P0V(1),PA(1)],[P0V(2),PA(2)],[P0V(3),PA(3)],'-','LineWidth',0.5);
%绘制坐标之间的相对运动
%纯转动后的xyz轴
plot3([R(1,1)+P0V(1),P0V(1)],[R(2,1)+P0V(2),P0V(2)],[R(3,1)+P0V(3),P0V(3)],'-','color','r');%绘制x轴
plot3([R(1,2)+P0V(1),P0V(1)],[R(2,2)+P0V(2),P0V(2)],[R(3,2)+P0V(3),P0V(3)],'-','color','r');%绘制y轴
plot3([R(1,3)+P0V(1),P0V(1)],[R(2,3)+P0V(2),P0V(2)],[R(3,3)+P0V(3),P0V(3)],'-','color','r');%绘制z轴
hold off;%是否保留运动轨迹
%生成gif动画
im = frame2im(getframe(gcf));
[I, map] = rgb2ind(im,20);
if (k==1)
imwrite(I,map,'MyGif2.gif','gif','Loopcount',inf,'DelayTime',0.1);
else
imwrite(I,map,'MyGif2.gif','gif','WriteMode','append','DelayTime',0.1);
end
end