matlab 使得三维图形可以手动旋转,三维图形的平移,旋转与错切

1、平移变换

三维图形的平移变换可以描述为:

matlab 使得三维图形可以手动旋转,三维图形的平移,旋转与错切_第1张图片

%% 圆的平移,x加1,y加1,z+1

clc;clear all;

figure(1);

axis equal;

sphere(50);%球由50*50个面组成

[x y z]=sphere();

hold on;

dx = 1;dy = 1;dz = 1;

%坐标加一

T = [1 0 0 0;0 1 0 0;0 0 1 0;dx dy dz 1];

Ex = x.*T(1,1)+y.*T(2,1)+z.*T(3,1)+1.*T(4,1);

Ey = x.*T(1,2)+y.*T(2,2)+z.*T(3,2)+1.*T(4,2);

Ez = x.*T(1,3)+y.*T(2,3)+z.*T(3,3)+1.*T(4,3);

% surf(E(:,1:21),E(:,22:42),E(:,43:63));

%surf(x+dx,y+dy,z+dz);

surf(Ex,Ey,Ez);

matlab 使得三维图形可以手动旋转,三维图形的平移,旋转与错切_第2张图片

2.旋转变换

三维图形的旋转变换可描述为:

matlab 使得三维图形可以手动旋转,三维图形的平移,旋转与错切_第3张图片

%% 绘制一个柱体,然后绕x轴旋转60°

clear all;clc;

[x,y,z]=cylinder(3); %调用cylinder函数‘()’内半径为3. 运行此命令后系统自动为x,y,z填充了数据

z(2,:)=2; %设置矩阵Z的第二行数值全为2,即设置圆柱体高度

figure;

surf(x,y,z,'FaceColor',[1,0,0]); %使用surf功能将x,y,z的数据导入。FaceColor即设置圆柱体颜色,红色色号为[1,0,0]

daspect([1 1 1]) %设置x,y,z坐标间距等长。

view(30,30) %设置图像显示角度

hold on

theta = linspace(0,2*pi,40) %将一个圆周分为40份

X=3*cos(theta); %将cos值赋予x

Y=3*sin(theta); %将sin赋予Y

Z=ones(size(X))+1; %设置Z与X长度想等

fill3(X,Y,Z,[1,0,0]); %使用Fill3功能函数,填充XYZ所围成的区域,这个是顶盖

fill3(X,Y,Z-2,[1,0,0]); %底盖

hold on

T = [1 0 0 0;0 cosd(60) sind(60) 0;0 -sind(60) cosd(60) 0;0 0 0 1];

Ex = x.*T(1,1)+y.*T(2,1)+z.*T(3,1)+1.*T(4,1);%这三句是旋转的柱面的侧面

Ey = x.*T(1,2)+y.*T(2,2)+z.*T(3,2)+1.*T(4,2);

Ez = x.*T(1,3)+y.*T(2,3)+z.*T(3,3)+1.*T(4,3);

%下面是旋转圆面,只旋转的上面的圆面,下面的没有旋转

Ex1 =X.*T(1,1)+Y.*T(2,1)+Z.*T(3,1)+1.*T(4,1);

Ey1 = X.*T(1,2)+Y.*T(2,2)+Z.*T(3,2)+1.*T(4,2);

Ez1 = X.*T(1,3)+Y.*T(2,3)+Z.*T(3,3)+1.*T(4,3);

surf(Ex,Ey,Ez);

fill3(Ex1,Ey1,Ez1,[1,0,0]);

matlab 使得三维图形可以手动旋转,三维图形的平移,旋转与错切_第4张图片

3.错切变换

错切变换的常用变换矩阵为:

matlab 使得三维图形可以手动旋转,三维图形的平移,旋转与错切_第5张图片

%% 3.用sphere生成多面体,然后对其进行错切变换,不断的改变错切系数和多面体的数量

clear all;clc;

T=[1 0 0;

1 1 0;

0 0 1];

for num = 1:10 %多边形的数量

for ti = 1:0.05:1.1 %错切系数

T(2,1) = T(2,1)*ti; %改变错切系数

[x,y,z] = sphere(num);

fprintf("错切系数:%f\n",T(2,1));

surf(x,y,z);

fprintf("显示第%d边形\n",num);

pause(0.5);

for i=1:num+1

for j=1:num+1

a=x(i,j);

b=y(i,j);

c=z(i,j);

m=[a b c]*T';

x1(i,j)=m(1);

y1(i,j)=m(2);

z1(i,j)=m(3);

end

end

fprintf("错切第%d边形\n",num);

surf(x1,y1,z1)

pause(0.5);

end

T(2,1) = 1;

end

matlab 使得三维图形可以手动旋转,三维图形的平移,旋转与错切_第6张图片

matlab 使得三维图形可以手动旋转,三维图形的平移,旋转与错切_第7张图片

你可能感兴趣的:(matlab,使得三维图形可以手动旋转)