matlab三维图像旋转

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

需要注意的是,这里的矩阵变换顺序是从右往左的,也就是先进行第一个轴的旋转,再进行第二个轴的旋转等等。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7483908
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:matlab对一些简单动态规划的三流解决方法
  • 除此之外, 这篇博客: MATLAB绘图功能中的 2.1.5.双y轴图形 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    绘制左右均有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 函数不能加入设置曲线线型、颜色及标出数据点的参数


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^