关于matlab画三维旋转图(我的笔记)

clc    
clear
close all
 
aplha1=0:pi/25:2*pi;    %% 二维曲线的代码---根据自己需要修改
N=length(aplha1);       %%不属于二维曲线的代码
x0=0.5.*(2 + sin(aplha1)).*cos(aplha1);
z0=-1 - sin(aplha1);      %% 二维曲线的代码---根据自己需要修改
y0=zeros(1,length(x0)); 


aplha2=0:pi/25:2*pi;
M=length(aplha2);
x= zeros(M,N);
y= zeros(M,N);
z= zeros(M,N);
for i=1:N
    for j=1:M
        x(j,i)=cos(aplha2(1,j))*x0(1,i);
        y(j,i)=sin(aplha2(1,j))*x0(1,i);
        z(j,i)=z0(1,i);
    end
end
h1=mesh(x,y,-z);%axis off
axis off
alpha(h1, 0.8);

如上图所示,这段代码画的一个陀螺或鸡蛋形状

 我们只需要改变某一行即可实现不同图形的转换


clc 
clear
close all
 
aplha1=0:pi/25:2*pi;    %% 二维曲线的代码---根据自己需要修改
N=length(aplha1);       %%不属于二维曲线的代码
x0=0.5.*(2 + sin(aplha1))-0.5;
z0=-1 - sin(aplha1);      %% 二维曲线的代码---根据自己需要修改
y0=zeros(1,length(x0)); 


aplha2=0:pi/25:2*pi;
M=length(aplha2);
x= zeros(M,N);
y= zeros(M,N);
z= zeros(M,N);
for i=1:N
    for j=1:M
        x(j,i)=cos(aplha2(1,j))*x0(1,i);
        y(j,i)=sin(aplha2(1,j))*x0(1,i);
        z(j,i)=z0(1,i);
    end
end
h1=mesh(x,y,-z);%axis off
axis off
alpha(h1, 0.8);

这便成了一个锥形


clc    
clear
close all
 
aplha1=0:pi/25:2*pi;    %% 二维曲线的代码---根据自己需要修改
N=length(aplha1);       %%不属于二维曲线的代码
x0=0.5.*(2 + sin(aplha1))-1;
z0=-1 - sin(aplha1);      %% 二维曲线的代码---根据自己需要修改
y0=zeros(1,length(x0)); 


aplha2=0:pi/25:2*pi;
M=length(aplha2);
x= zeros(M,N);
y= zeros(M,N);
z= zeros(M,N);
for i=1:N
    for j=1:M
        x(j,i)=cos(aplha2(1,j))*x0(1,i);
        y(j,i)=sin(aplha2(1,j))*x0(1,i);
        z(j,i)=z0(1,i);
    end
end
h1=mesh(x,y,-z);%axis off
axis off
alpha(h1, 0.8);

双向圆锥


clc   
clear
close all
 
aplha1=0:pi/25:2*pi;    %% 二维曲线的代码---根据自己需要修改
N=length(aplha1);       %%不属于二维曲线的代码
x0=0.5.*(2 + sin(aplha1))+0.005;
z0=-1 - sin(aplha1);      %% 二维曲线的代码---根据自己需要修改
y0=zeros(1,length(x0)); 


aplha2=0:pi/25:2*pi;
M=length(aplha2);
x= zeros(M,N);
y= zeros(M,N);
z= zeros(M,N);
for i=1:N
    for j=1:M
        x(j,i)=cos(aplha2(1,j))*x0(1,i);
        y(j,i)=sin(aplha2(1,j))*x0(1,i);
        z(j,i)=z0(1,i);
    end
end
h1=mesh(x,y,-z);%axis off
axis off
alpha(h1, 0.8);

伪圆柱

把输出x进行一个倒数处理,可实现上下翻转


clc   
clear
close all
 
aplha1=0:pi/25:2*pi;    %% 二维曲线的代码---根据自己需要修改
N=length(aplha1);       %%不属于二维曲线的代码
x0=0.5.*(2 + sin(aplha1))+0.005;
z0=-1 - sin(aplha1);      %% 二维曲线的代码---根据自己需要修改
y0=zeros(1,length(x0)); 


aplha2=0:pi/25:2*pi;
M=length(aplha2);
x= zeros(M,N);
y= zeros(M,N);
z= zeros(M,N);
for i=1:N
    for j=1:M
        x(j,i)=cos(aplha2(1,j))*x0(1,i);
        y(j,i)=sin(aplha2(1,j))*x0(1,i);
        z(j,i)=z0(1,i);
    end
end

h1=mesh(x,y,z);%axis off
axis off
alpha(h1, 0.8);

得到相应的翻转图形


clc    
clear
close all
 
aplha1=0:pi/2:pi;    %% 二维曲线的代码---根据自己需要修改
N=length(aplha1);       %%不属于二维曲线的代码
x0=0.5.*(2 + sin(aplha1))-0.5;
z0=-1 - sin(aplha1);      %% 二维曲线的代码---根据自己需要修改
y0=zeros(1,length(x0)); 


aplha2=0:pi/2:2*pi;
M=length(aplha2);
x= zeros(M,N);
y= zeros(M,N);
z= zeros(M,N);
for i=1:N
    for j=1:M
        x(j,i)=cos(aplha2(1,j))*x0(1,i);
        y(j,i)=sin(aplha2(1,j))*x0(1,i);
        z(j,i)=z0(1,i);
    end
end
h1=mesh(x,y,-z);%axis off
%plot3(x,y,-z);
axis off
alpha(h1, 0.8);


clc    %%二维绕Y轴转动   竖直的水滴
clear
close all
 
aplha1=0:pi/20:2*pi;    %% 二维曲线的代码---根据自己需要修改
N=length(aplha1);       %%不属于二维曲线的代码
x0=0.5.*(2 + sin(aplha1))-0.5;
z0=-1 - sin(aplha1);      %% 二维曲线的代码---根据自己需要修改
y0=zeros(1,length(x0)); 


aplha2=0:pi/20:2*pi;
M=length(aplha2);
x= zeros(M,N);
y= zeros(M,N);
z= zeros(M,N);
for i=1:N
    for j=1:M
        x(j,i)=cos(aplha2(1,j))*x0(1,i);
        y(j,i)=sin(aplha2(1,j))*x0(1,i);
        z(j,i)=z0(1,i);
    end
end

h1=mesh(x,y,-z);%axis off
%plot3(x, y, -z);
axis auto
alpha(h1, 0.8);
hold on;
plot3([x(15,11), x(15,11)], [y(15,11), -y(15,11)],[-z(11,11), -z(11,11)], 'red');
hold on;
plot3([x(14,11), x(14,11)], [y(14,11), -y(14,11)],[-z(11,11), -z(11,11)], 'red');
hold on;
plot3([x(13,11), x(13,11)], [y(13,11), -y(13,11)],[-z(11,11), -z(11,11)], 'red');
hold on;
plot3([x(12,11), x(12,11)], [y(11,12), -y(11,12)],[-z(11,11), -z(11,11)], 'red');
hold on;
plot3([x(11,11), x(11,11)], [y(11,11), -y(11,11)],[-z(11,11), -z(11,11)], 'red');
hold on;
plot3([x(10,11), x(10,11)], [y(11,10), -y(11,10)],[-z(11,11), -z(11,11)],  'red');
hold on;
plot3([x(9,11), x(9,11)], [y(9,11), -y(9,11)],[-z(11,11), -z(11,11)],  'red');
hold on;
plot3([x(8,11), x(8,11)], [y(8,11), -y(8,11)],[-z(11,11), -z(11,11)],  'red');
hold on;
plot3([x(7,11), x(7,11)], [y(7,11), -y(7,11)],[-z(11,11), -z(11,11)],  'red');

xlabel('X轴');
ylabel('Y轴');
zlabel('Z轴');


clc    %%二维绕Y轴转动   竖直的水滴
clear
close all
 
aplha1=0:pi/2:2*pi;    %% 二维曲线的代码---根据自己需要修改
N=length(aplha1);       %%不属于二维曲线的代码
x0=0.5.*(2 + sin(aplha1))-1;
z0=-1 - sin(aplha1);      %% 二维曲线的代码---根据自己需要修改
y0=zeros(1,length(x0)); 


aplha2=0:pi/2:2*pi;
M=length(aplha2);
x= zeros(M,N);
y= zeros(M,N);
z= zeros(M,N);
for i=1:N
    for j=1:M
        x(j,i)=cos(aplha2(1,j))*x0(1,i);
        y(j,i)=sin(aplha2(1,j))*x0(1,i);
        z(j,i)=z0(1,i);
    end
end

h1=mesh(x,y,-z);%axis off

axis off
alpha(h1, 0.8);
xlabel(' {\it x}- axis');  ylabel(' {\it{y}}- axis');  zlabel(' U(x,y)/J ');
%以下横方向
ploo([0.45,0.05,2],[-0.05,-0.45,2]);
ploo([0.40,0.10,2],[-0.10,-0.40,2]);
ploo([0.35,0.15,2],[-0.15,-0.35,2]);
ploo([0.30,0.20,2],[-0.20,-0.30,2]);
ploo([0.25,0.25,2],[-0.25,-0.25,2]);
ploo([0.2,0.30,2],[-0.3,-0.20,2]);
ploo([0.15,0.35,2],[-0.35,-0.15,2]);
ploo([0.10,0.40,2],[-0.40,-0.10,2]);
ploo([0.05,0.45,2],[-0.45,-0.05,2]);

%以下竖方向
ploo([-0.45,0.05,2],[0.05,-0.45,2]);
ploo([-0.40,0.10,2],[0.10,-0.40,2]);
ploo([-0.35,0.15,2],[0.15,-0.35,2]);
ploo([-0.30,0.20,2],[0.20,-0.30,2]);
ploo([-0.25,0.25,2],[0.25,-0.25,2]);
ploo([-0.2,0.30,2],[0.3,-0.20,2]);
ploo([-0.15,0.35,2],[0.35,-0.15,2]);
ploo([-0.10,0.40,2],[0.40,-0.10,2]);
ploo([-0.05,0.45,2],[0.45,-0.05,2]);
%以下连接原点
ploo([0.45,0.05,2],[0,0,1]);
ploo([0.40,0.10,2],[0,0,1]);
ploo([0.35,0.15,2],[0,0,1]);
ploo([0.30,0.20,2],[0,0,1]);
ploo([0.25,0.25,2],[0,0,1]);
ploo([0.2,0.30,2],[0,0,1]);
ploo([0.15,0.35,2],[0,0,1]);
ploo([0.10,0.40,2],[0,0,1]);
ploo([0.05,0.45,2],[0,0,1]);

ploo([0,0,1],[-0.05,-0.45,2]);
ploo([0,0,1],[-0.10,-0.40,2]);
ploo([0,0,1],[-0.15,-0.35,2]);
ploo([0,0,1],[-0.20,-0.30,2]);
ploo([0,0,1],[-0.25,-0.25,2]);
ploo([0,0,1],[-0.3,-0.20,2]);
ploo([0,0,1],[-0.35,-0.15,2]);
ploo([0,0,1],[-0.40,-0.10,2]);
ploo([0,0,1],[-0.45,-0.05,2]);

ploo([-0.45,0.05,2],[0,0,1]);
ploo([-0.40,0.10,2],[0,0,1]);
ploo([-0.35,0.15,2],[0,0,1]);
ploo([-0.30,0.20,2],[0,0,1]);
ploo([-0.25,0.25,2],[0,0,1]);
ploo([-0.2,0.30,2],[0,0,1]);
ploo([-0.15,0.35,2],[0,0,1]);
ploo([-0.10,0.40,2],[0,0,1]);
ploo([-0.05,0.45,2],[0,0,1]);

ploo([0,0,1],[0.05,-0.45,2]);
ploo([0,0,1],[0.10,-0.40,2]);
ploo([0,0,1],[0.15,-0.35,2]);
ploo([0,0,1],[0.20,-0.30,2]);
ploo([0,0,1],[0.25,-0.25,2]);
ploo([0,0,1],[0.3,-0.20,2]);
ploo([0,0,1],[0.35,-0.15,2]);
ploo([0,0,1],[0.40,-0.10,2]);
ploo([0,0,1],[0.45,-0.05,2]);

zlim([1, 2]);
grid on;

%ploo(point2,point3);
%ploo(point3,point4);
%ploo(point4,point1);


function oo=ploo(DD,DDD) 
    hold on;
    plot3([DD(1), DDD(1)], [DD(2), DDD(2)], [DD(3), DDD(3)], 'black');
    oo=0;
end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值