下面的代码是有很多问题的,先不用管。但是就标题出现的问题,我找了一下发现是第60行,fmat1(:,i)=getframe;应该改为fmat1(:,k)=getframe; 因为我循环的变量是k。这里我是因为三个循环写的头晕了,把变量名搞错了。也就是说,标题这个错误信息中“未初始化”的意思是 帧结构体里面有空的元素,也就是有些帧是空白的,没有通过getframe赋值成功。打开帧结构体的变量框:
这些空白的都是未初始化的。
O=[0,0,0]; % 原点
%X,Y,Z三个坐标轴的方向向量:
L=10; %坐标轴的长度
X0=[L,0,0];
Y0=[0,L,0];
Z0=[0,0,L];
X=[L,0,0];
Y=[0,L,0];
Z=[0,0,L];
%A,B,C的值计算出来用于后面标记text:
A=[X0(1)+O(1),X0(2)+O(2),X0(3)+O(3)];
B=[Y0(1)+O(1),Y0(2)+O(2),Y0(3)+O(3)];
C=[Z0(1)+O(1),Z0(2)+O(2),Z0(3)+O(3)];
%利用quiver3()作世界坐标系:
quiver3(O(1),O(2),O(3),X0(1),X0(2),X0(3),'b','LineWidth',2);
hold on
quiver3(O(1),O(2),O(3),Y0(1),Y0(2),Y0(3),'b','filled','LineWidth',2);
quiver3(O(1),O(2),O(3),Z0(1),Z0(2),Z0(3),'b','filled','LineWidth',2);
%用文本标记X,Y,Z轴:
text(A(1)+0.2,A(2),A(3),'X','Color','red','FontSize',14);
text(B(1),B(2)+0.2,B(3),'Y','Color','green','FontSize',14);
text(C(1),C(2),C(3)+0.2,'Z','Color','[1 0.5 0]','FontSize',14);
%--------------------------------------------------------------------------
% axis([-4,4,-4,4,-4,4]); %设置坐标轴范围,根据需要调整显示效果
%设置坐标轴反向:
set(gca,'XDir','reverse');
set(gca,'YDir','reverse');
%设置grid的属性,待完善:
%------
axis equal %保证图像等刻度显示,图像不因刻度不同发生畸变。
xlabel("x轴");
ylabel("y轴");
zlabel("z轴");
%画与坐标轴平行的直虚线,颜色为灰色,作背景参考用:
plot3([-10,10],[0,0],[0,0],'--','Color',[0.5 0.5 0.5]);
hold on
grid on
plot3([0,0],[-10,10],[0,0],'--','Color',[0.5 0.5 0.5]);
plot3([0,0],[0,0],[-10,10],'--','Color',[0.5 0.5 0.5]);
%-------------添加动画------------------------------------------------------
loops = 135;
fmat1(loops)=struct('cdata',[],'colormap',[]);
theAxes=axis;
for k=1:45
rz=rotz(k*pi/180);
X_e=rz*X.';
Y_e=rz*Y.';
Z_e=rz*Z.';
%利用quiver3()作世界坐标系:
quiver3(O(1),O(2),O(3),X_e(1),X_e(2),X_e(3),'r','LineWidth',2);
hold on
quiver3(O(1),O(2),O(3),Y_e(1),Y_e(2),Y_e(3),'r','LineWidth',2);
quiver3(O(1),O(2),O(3),Z_e(1),Z_e(2),Z_e(3),'r','LineWidth',2);
axis(theAxes);
fmat1(:,i)=getframe;
end
for j=1:30
ry=roty(j*pi/180);
X_e2=rz*X_e;
Y_e2=rz*Y_e;
Z_e2=rz*Z_e;
%利用quiver3()作世界坐标系:
quiver3(O(1),O(2),O(3),X_e2(1),X_e2(2),X_e2(3),'r','LineWidth',2);
hold on
quiver3(O(1),O(2),O(3),Y_e2(1),Y_e2(2),Y_e2(3),'r','LineWidth',2);
quiver3(O(1),O(2),O(3),Z_e2(1),Z_e2(2),Z_e2(3),'r','LineWidth',2);
axis(theAxes);
fmat1(:,45+j)=getframe;
end
for i=1:60
rx=rotx(i*pi/180);
X_e3=rz*X_e2;
Y_e3=rz*Y_e2;
Z_e3=rz*Z_e2;
%利用quiver3()作世界坐标系:
quiver3(O(1),O(2),O(3),X_e3(1),X_e3(2),X_e3(3),'r','LineWidth',2);
hold on
quiver3(O(1),O(2),O(3),Y_e3(1),Y_e3(2),Y_e3(3),'r','LineWidth',2);
quiver3(O(1),O(2),O(3),Z_e3(1),Z_e3(2),Z_e3(3),'r','LineWidth',2);
axis(theAxes);
fmat1(:,i+75)=getframe;
end
movie(fmat1,1,10);