绘制三维图形的基本函数

您所在的位置:网站首页 在线函数图像绘制三维 绘制三维图形的基本函数

绘制三维图形的基本函数

2024-03-21 13:33| 来源: 网络整理| 查看: 265

1.绘制三维图形的基本函数

    

1

2

3

4

5

6

最基本的三维绘图函数为plot3;

plot3与plot用法十分相似,调用格式:

 

plot(x1,y1,z1,选项1,x2,y2,z2,选项2,...,xn,yn,zn,选项n)

当x,y,z是同维向量时,则x,y,z,对应元素构成一条三维曲线;

当x,y,z是同维矩阵时,则以x,y,z对应列元素绘制三维曲线,曲线条数等于矩阵列数。

  例:

程序如下:

1

2

3

4

5

6

7

8

9

t=0:pi/50:2*pi;

x=8*cos(t);

y=4*sqrt(2)*sin(t);

z=-4*sqrt(2)*sin(t);

plot3(x,y,z,'p');

title('Line in 3-D Space');

text(0,0,0,'origin');

xlabel('x'),ylabel('y'),zlabel('z');

grid;

  运行结果:

2.三维曲面 2.1平面网格坐标矩阵的生成

  绘制z=f(x,y)所代表的三维曲面图,先要在xy平面选定一个矩形区域,假定矩形区域D=[a,b]*[c,d],然后将[a,b]在x方向分成m份,将[c,d]在y方向分成n份,由各划分点分别作平行于两坐标轴的直线,将区域D分成m*n个小矩形,生成代表每一个小矩形顶点坐标的平面网格坐标矩阵,最后利用有关函数绘图。

  产生平面区域内的网格坐标矩阵有两种方法:

  1.利用矩阵运算生成、

1

2

3

4

5

6

7

8

9

10

x=a:dx:b;

y=(c:dy:d)';

X=ones(size(y))*x;

Y=y*ones(size(x));

语句执行后,

矩阵X的每一行都是向量x,行数等于向量y的元素个数,

矩阵Y的每一列都是向量y,列数等于向量x的元素个数。

于是对于矩阵X,Y来说,它们位置(i,j)上的元素值(X(i,j),Y(i,j))就是所要形成的平面网格

在位置(i,j)上的X,Y坐标。可根据每一个网格点上的x,y坐标求这个点对应的z,则得到Z矩阵。

显然,X,Y,Z各列或各行所对应坐标,对应于一条空间曲线,空间曲线的集合将可组成空间曲面。

  2.利用meshgrid函数生成。

 

1

2

3

4

5

6

调用格式:

x=a:dx:b;

y=c:dy:d;

[x,y]=meshgrid(x,y);

语句执行后得到与方法1相同的矩阵X,Y。

当向量x=y时,函数可写成meshgrid(x);

  例:利用法网格坐标阵巧解不定方程:

  已知6 [a,b]=find(z==126)

 

a =

 

     7

     5

     3

     1

 

 

b =

 

     2

     7

    12

    17

>> x(7,2)

 

ans =

 

     8

2.2 绘制三维曲面的函数

两个函数:

1

2

3

4

5

6

7

8

mesh(x,y,z,c)%用于绘制三维网格图,在不需要绘制特别精细三维曲面时使用。

surf(x,y,z,c)%用于绘制三维曲面,各线条之间的补面用颜色填充。

 

关于x,y,z,c:

 

one:通常x,y,z是同维矩阵,x,y是网格坐标矩阵,z是网格点的高度矩阵,c用于指定在不同高度下的颜色范围。

two:c省略时,MATLAB认为c=z,即颜色的高度正比于图形高度,以得到层次分明的三维图形。当x,y省略时,把z矩阵的列下标当做x轴坐标,把z矩阵的行下标当做y轴坐标,然后绘制三维曲面图。

three:当x,y是向量时,要求x的长度必须等于z矩阵的列数,y的长度等于z矩阵的行数,x,y向量元素的组合构成网格点的x,y坐标,z坐标则取自z矩阵,然后绘制三维曲面图。

例5.15:用三维曲面图表现函数z=sinycosx。

program1:用meshgrid+mesh

1

2

3

4

5

6

x=0:0.1:2*pi;

[x,y]=meshgrid(x);

z=sin(y).*cos(x);

mesh(x,y,z);

xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis');

title('mesh');效果同:

x=0:0.1:2*pi; y=0:0.1:2*pi; z=sin(y')*cos(x); mesh(x,y,z); xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis');

  运行结果:

program2:用meshgrid+surf

1

2

3

4

5

6

x=0:0.1:2*pi;

[x,y]=meshgrid(x);

z=sin(y).*cos(x);

surf(x,y,z);

xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis');

title('meshgrid+surf');

  

program3:用一般绘图函数plot3

1

2

3

4

5

6

7

x=0:0.1:2*pi;

[x,y]=meshgrid(x);

z=sin(y).*cos(x);

plot3(x,y,z);

xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis');

title('meshgrid+plot3-1f');

grid;

  

例5.16:绘制两个直径相等的圆管的相交图形。

程序如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

%两个等直径圆管的交线

 

m=60;%m是圆圈的密集度,表示画60个圆圈

z=1.2*(0:m)/m;%1.2是圆柱高

r=ones(size(z));

theta=(0:m)/m*2*pi;

 

x1=r'*cos(theta);%每行都是一个cos(theta)

y1=r'*sin(theta);%每行都是一个sin(theta)

%y1=y1';

z1=z'*ones(1,m+1);%每行的z相同

 

surf(x1,y1,z1);%绘图,立起的圆柱

 

%axis equal,axis off

hold on

 

x=(-m:2:m)/m;

x2=x'*ones(1,m+1);%m+1个x列

y2=r'*cos(theta);%以y和z为底画圆

%y2=y2';

z2=r'*sin(theta);

 

surf(x2,y2,z2);

 

axis equal,axis off

title('两个等直径圆管的交线');

hold off

  运行结果:

 将上述例5.16中程序的%备注取消,即将第一图的y阵第二图的z阵转置,这样在底层面就不再是圆线了,效果如下:

例5.17 分析由函数z=x^2-2y^2构成的曲面形状及与平面z=a的交线。

 

1

2

3

4

5

6

7

8

9

10

11

12

13

[x,y]=meshgrid(-10:0.2:10);

z1=(x.^2-2*y.^2)+eps;%第一个曲面

a=input('a=?');

z2=a*ones(size(x));%第二个曲面(本质是一个数乘)

subplot(1,2,1);

mesh(x,y,z1);hold on;mesh(x,y,z2);%分别画出两个曲面

v=[-10,10,-10,10,-100,100];axis(v);grid;%第一个子图的坐标设置

hold off;

r0=(abs(z1-z2)> y=magic(5)

 

y =

 

    17    24     1     8    15

    23     5     7    14    16

     4     6    13    20    22

    10    12    19    21     3

    11    18    25     2     9

 

>> y(5,:)=[]%删除第五行

 

y =

 

    17    24     1     8    15

    23     5     7    14    16

     4     6    13    20    22

    10    12    19    21     3

 

>> bar3(y)

  

(2)当y为向量时,也是以下标为坐标,为值为高度。

1

2

3

4

5

6

7

8

>> y=[1 3 5 7 2]

 

y =

 

     1     3     5     7     2

 

>> bar3(y)

>>

  

2.bar3(x,y)

(1)x为向量,y为向量

1

2

3

4

5

6

7

8

9

10

11

12

13

14

>> y

 

y =

 

     1     3     5     7     9    11

 

>> x

 

x =

 

     1     3     5     4     8    11

 

>> bar3(x,y)

>>

  

(1)x为向量,y为矩阵(x元素改变y矩阵的x坐标)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

y =

 

    17    24     1     8    15

    23     5     7    14    16

     4     6    13    20    22

    10    12    19    21     3

 

>> x=[1 3 5 9]

 

x =

 

     1     3     5     9

 

>> bar3(x,y)

  

 

1

4.2 三维杆图

1

2

3

4

stem3(z)

stem3(x,y,z)

第一种格式将 数据序列z 表示为xy平面向上延伸的杆图,x和y自动生成。

第二种格式在x和y指定位置上绘制 数据序列z的杆图,x,y,z的维数必须相同。

1.stem3(z)

(1)z为矩阵,以下标为坐标,值为杆值

1

2

3

4

5

6

7

8

z =

 

    17    24     1     8    15

    23     5     7    14    16

     4     6    13    20    22

    10    12    19    21     3

 

>> stem3(z)

  

(2)z为向量,以下标为坐标,值为杆值

1

2

3

4

5

6

7

8

z=y(1,:)

 

z =

 

    17    24     1     8    15

 

>> stem3(z)

>> stem(z)

  

  

2.stem3(x,y,z)

(1)x,y,z均为向量,以(x,y)为对应坐标z为值

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

x =

 

     1     2     5     9     6

 

>> y=x

 

y =

 

     1     2     5     9     6

 

>> z=x

 

z =

 

     1     2     5     9     6

 

>> stem3(x,y,z)

>>

  

4.3 三维饼图

1

2

pie3(x)

其中x为向量,用x中的数据绘制一个三维饼图。

  

1

2

pie3([2347 1827 2043 3025])

pie([2347 1827 2043 3025])

  

4.4 填充多边形

1

2

fill3(x,y,z,c)

使用x,y,z作为多边形的顶点,用c指定了填充的颜色。

  

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

fill(x,y,c)

以(x,y)为点,c为颜色图,连点并填充点间面。

x =

 

     1     5     6     8

 

>> y

 

y =

 

     2     6     4     6

 

>> z=[1 2 3 4 5 ]

 

z =

 

     1     2     3     4     5

 

>> fill(x,y,z)

  

1

fill3(rand(3,5),rand(3,5),rand(3,5),'y')

  

分类: matlab



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3