4.三维旋转的实现
要求:读懂以上程序,程序先绘制一个长方体,然后隔0.1秒又绘制出另一个围绕z轴旋转i角度的长方体,循环中每次(每个顶点)都被旋转矩阵变换成新的顶点。把变换矩阵改成围绕x轴的旋转矩阵、y轴旋转的变换矩阵,再运行程序看看有什么不同。
for i=-2*pi:0.5:2*pi
R=[cos(i) sin(i) 0;-sin(i) cos(i) 0;0 0 1];
vert=[1 1 1;1 2 1;2 2 1;2 1 1;1 1 2;1 2 2;2 2 2;2 1 2];
vert=vert*R;
fac=[1 2 3 4;2 6 7 3;4 3 7 8;1 5 8 4;1 2 6 5;5 6 7 8];
pause(0.1)
patch('faces',fac,'vertices',vert,'FaceVertexCData',hsv(8),'Facecolor','interp');
view(3);
end
参考GPT和自己的思路:这个程序实现了围绕z轴旋转长方体的动画效果。程序中使用旋转矩阵来对顶点进行矩阵变换,从而实现旋转效果。如果将变换矩阵改成围绕x轴或y轴的旋转矩阵,就可以实现围绕不同轴旋转的效果。具体的改动可以参考以下代码:
围绕x轴旋转:
for i=-2*pi:0.5:2*pi
R=[1 0 0;0 cos(i) sin(i);0 -sin(i) cos(i)];
vert=[1 1 1;1 2 1;2 2 1;2 1 1;1 1 2;1 2 2;2 2 2;2 1 2];
vert=vert*R;
fac=[1 2 3 4;2 6 7 3;4 3 7 8;1 5 8 4;1 2 6 5;5 6 7 8];
pause(0.1)
patch('faces',fac,'vertices',vert,'FaceVertexCData',hsv(8),'Facecolor','interp');
view(3);
end
围绕y轴旋转:
for i=-2*pi:0.5:2*pi
R=[cos(i) 0 -sin(i);0 1 0;sin(i) 0 cos(i)];
vert=[1 1 1;1 2 1;2 2 1;2 1 1;1 1 2;1 2 2;2 2 2;2 1 2];
vert=vert*R;
fac=[1 2 3 4;2 6 7 3;4 3 7 8;1 5 8 4;1 2 6 5;5 6 7 8];
pause(0.1)
patch('faces',fac,'vertices',vert,'FaceVertexCData',hsv(8),'Facecolor','interp');
view(3);
end
需要注意的是,这里的矩阵变换顺序是从右往左的,也就是先进行第一个轴的旋转,再进行第二个轴的旋转等等。
不知道你这个问题是否已经解决, 如果还没有解决的话:绘制左右均有y轴的图形
plotyy(x1,y1,x2,y2)
:在窗口中同时绘制两条曲线:(x1,y1)和(x2,y2),曲线(x1,y1)用左侧的 y 轴,曲线(x2,y2)用右侧的 y 轴plotyy(x1,y1,x2,y2, 'fun')
:'fun’是字符串,用来指定绘图的函数名,如 plot、semilogx、semilogy 等plotyy(z1,y1,x2,y2, ‘fun1’, ‘fun2’)
:'fun1’和’fun2’指定不同的绘图函数分别绘制
注意: plotyy 函数不能加入设置曲线线型、颜色及标出数据点的参数