Matlab绘制三维图

Matlab绘制三维图
Matlab绘制三维图

二.三维绘图

一.绘制三维曲线的基本函数

最基本的三维图形函数为plot3,它将二维绘图函数plot的有关功能扩展到三维空间,可以用来绘制三维曲线。其调用格式为:

plot3(x1,y1,z1,选项1,x2,y2,z2,选项2,…)

其中每一组x,y,z组成一组曲线的坐标参数,选项的定义和plot的选项一样。当x,y,z是同维向量时,则x,y,z对应元素构成一条三维曲线。当x,y,z是同维矩阵时,则以x,y,z对应列元素绘制三维曲线,曲线条数等于矩阵的列数。

例513 绘制空间曲线

该曲线对应的参数方程为

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;

二.三维曲面

1.平面网格坐标矩阵的生成

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

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

利用矩阵运算生成。

x=a:dx:b;

y=(c:dy:d)’;

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

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

经过上述语句执行后,矩阵X的每一行都是向量x,行数等于向量y的元素个数,矩阵Y的每一列都是向量y,列数等于向量x的元素个数。

利用meshgrid函数生成;

x=a:dx:b;

y=c:dy:d;

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

语句执行后,所得到的网格坐标矩阵和上法,相同,当x=y时,可以写成meshgrid(x)

2.绘制三维曲面的函数

Matlab提供了mesh函数和surf函数来绘制三维曲面图。mesh函数用来绘制三维网格图,而surf 用来绘制三维曲面图,各线条之间的补面用颜色填充。其调用格式为:

mesh(x,y,z,c)

surf(x,y,z,c)

一般情况下,x,y,z是维数相同的矩阵,x,y是网格坐标矩阵,z是网格点上的高度矩阵,c用于指定在不同高度下的颜色范围。c省略时,Matlab认为c=z,也即颜色的设定是正比于图形的高度的。这样就可以得到层次分明的三维图形。当x,y省略时,把z矩阵的列下标当作x轴的坐标,把z矩阵的行下标当作y轴的坐标,然后绘制三维图形。当x,y是向量时,要求x的长度必须等于z矩阵的列,y的长度必须等于必须等于z的行,x,y向量元素的组合构成网格点的x,y坐标,z坐标则取自z矩阵,然后绘制三维曲线。

例515 用三维曲面图表现函数:

为了便于分析三维曲面的各种特征,下面画出3种不同形式的曲面。

%program 1

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'); pause;

%program 2

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('surf'); pause;

%program 3

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('plot3-1');grid;

程序执行结果分别如上图所示。从图中可以发现,网格图(mesh)中线条有颜色,线条间补面无颜色。曲面图(surf)的线条都是黑色的,线条间补面有颜色。进一步观察,曲面图补面颜色和网格图线条颜色都是沿z轴变化的。用plot3 绘制的三维曲面实际上由三维曲线组合而成。可以分析plot(x’,y’,z’)所绘制的曲面的特征。

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

m=30;

z=1.2*(0:m)/m;

r=ones(size(z));

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

x1=r'*cos(theta);y1=r'*sin(theta);%生成第一个圆管的坐标矩阵

z1=z'*ones(1,m+1);

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

x2=x'*ones(1,m+1);y2=r'*cos(theta);%生成第一个圆管的坐标矩阵

z2=r'*sin(theta);

surf(x1,y1,z1); %绘制竖立的圆管

axis eq l ,axis off

hold on

surf(x2,y2,z2); %绘制平放的圆管

axis eq l ,axis off

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

hold off

例517 分析由函数构成的曲面形状与平面z=a的交线。

此外,还有两个和mesh函数相似的函数,即带等高线的三维网格曲面函数meshc和带底座的三维网格曲面函数meshz,其用法和mesh类似。不同的是,meshc还在xy平面上绘制曲面在z轴方向的等高线,meshz还在xy平面上绘制曲面的底座。

surf函数也有两个类似的函数,即具有等高线的曲面函数surfc和具有光照效果的曲面函数surfl。

例518 在xy平面内选择[-8, 8]×[-8, 8]绘制函数,

[x,y]=meshgrid(-8:0.5:8);

z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2+eps);

s plot(2,2,1);

meshc(x,y,z);

title('meshc');

s plot(2,2,2);

meshz(x,y,z);

title('meshz');

s plot(2,2,3);

surfc(x,y,z);

title('surfc');

s plot(2,2,4);

surfl(x,y,z);

title('surfl');

3.标准三维曲面

Matlab提供了一些函数用于绘制标准三维曲面,这些函数可以产生相应的绘图数据,常用于三维图形的演示。如,sphere函数和cylinder函数分别用于绘制三维球面和柱面。sphere函数的调用格式为:

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

该函数将产生(n+1)×(n+1矩阵x,y,z 。采用这三个矩阵可以绘制出圆心位于原点、半径为1的单位球体。若在调用该函数时不带输出参数,则直接绘制所需球面。n决定了球面的圆滑程度,其默认值为20。若n值取的比较小,则绘制出多面体的表面图。

cylinder函数的调用格式为:

[x,y,z]=cylinder(R,n)

其中R是一个向量,存放柱面各个等间隔高度上的半径,n表示在圆柱圆周上有n个间隔点,默认有20个间隔点。如:cylinder(3)生成一个圆柱,cylinder([10,1])生成一个圆锥。而t=0:pi/100:4*pi; R=sin(t); cylinder(R,30);生成一个正弦圆柱面。

另外Matlab还提供了一个peaks函数,称为多峰函数,常用于三维曲面的演示。该函数可以用来生成绘图数据矩阵,矩阵元素由函数:

在矩形区域[-3 3]×[-3 3]的等分网格点上的函数值确定。如:z=peaks(30)

将生成一个30×30矩阵,

例519 绘制标准三维曲面图形

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

[x,y,z]=cylinder(2+sin(t),30);

s plot(1,3,1);

surf(x,y,z);

s plot(1,3,2);

[x,y,z]=sphere;

surf(x,y,z);

s plot(1,3,3);

[x,y,z]=peaks(30);

meshz(x,y,z);

3.其他三维图形。

在介绍二维图形时,曾经提到条形图、杆图、饼图和填充图等特殊图形,它们还可以以三维形式出现,其函数分别为bar3,stem3,pie3和fill3。

bar3绘制三维条形图,常用格式为:

bar3(y);

bar3(x,y)

在第一种格式中,y的每个元素对应于一个条形。第二种格式在x指定的位置上绘制y中元素的条形图。

stem3函数绘制离散序列数据的三维杆图,常用格式为:

stem3(z)

stem3(x,y,z)

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

指定的位置上绘制数据序列z的杆图,x,y,z的维数要相同。

pie3函数绘制三维饼图,常用格式为:

pie3(x)

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

fill3函数可在三维空间内绘制出填充过的多边形,常用格式为:

fill3(x,y,z,c)

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

例520 绘制三维图形。

1绘制魔方阵的三维条形图2以三维杆图形式绘制曲线y=2sinx 3已知x =[2347,1827,2043,3025] ,绘制三维饼图4用随机的顶点坐标值画出5个黄色三角形

s plot(2,2,1);

bar3(magic(4));

s plot(2,2,2);

y=2*sin(0:pi/10:2*pi);

stem3(y);

s plot(2,2,3);

pie3([2347,1827,2043,3025]);

s plot(2,2,4);

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

除了上面讨论的三维图形外,常用的图形还有瀑布图和三维曲面的等高线图。绘制瀑布图用waterfall 函数,用法和meshz函数相似,只是它的网格线在x轴方向出现,具有瀑布效果。等高线图分二维和三维两种形式,分别使用函数contour和contour3绘制。

例521 绘制多峰函数的瀑布图和等高线图。

s plot(1,2,1);

[X,Y,Z]=peaks(30);

waterfall(X,Y,Z);

xlabel('XX');ylabel('YY');zlabel('ZZ');

s plot(1,2,2);

contour3(X,Y,Z,12,'k');%其中12代表高度的等级数

xlabel('XX');ylabel('YY');zlabel('ZZ');

三.三维图形的精细处理

一.视点处理

在日常生活中,从不同的角度观察物体,所看到的物体形状是不一样的。同样,从不同视点绘制的三维图形的形状也是不一样的。视点位置可由方位角和仰角表示。

方位角

Matlab提供了设置视点的函数view,其调用格式为:

view(az,el)

其中az为方位角,el为仰角,它们均以度为单位。系统默认的视点定义为方位角为-37.5度,仰角30度。

例522 从不同视点绘制多峰函数曲面。

s plot(2,2,1);mesh(peaks);

view(-37.5,30);

title('1');

s plot(2,2,2);mesh(peaks);

view(0,90);

title('2');

s plot(2,2,3);mesh(peaks);

view(90,0);

title('3');

s plot(2,2,4);mesh(peaks);

view(-7,-10);

title('4');

二.色彩处理

三.图形的裁剪处理

Matlab定义的NaN常数可以用于表示那些不可使用的数据,利用这些特性,可以将图形中需要裁剪部分对应的函数值设置成NaN,这样在绘制图形时,函数值为NaN的部分将不显示出来,从而达到对图形进行裁剪的目的。例如,要削掉正弦波顶部或底部大于0.5的部分,可使用下面的程序。

x=0:pi/10:4*pi;

y=sin(x);

i=find(abs(y)>0.5);

x(i)=NaN;

plot(x,y);

例524 绘制两个球面,其中一个在另一个里面,将外面的球裁掉一部分,以便能看到里面的球。

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

%生成外面的大球

z1=z;

z1(:,1:4)=NaN;%将大球裁去一部分

c1=ones(size(z1));

surf(3*x,3*y,3*z1,c1); %生成里面的小球

hold on

z2=z;

c2=2*ones(size(z2));

c2(:,1:4)=3*ones(size(c2(:,1:4)));

surf(1.5*x,1.5*y,1.5*z2,c2);

colormap([0 1 0;0.5 0 0;1 0 0]);

grid on

hold off

色图中使用三种颜色,外面的球是绿色,里面的球采用深浅不同的两种红色。

四.隐函数作图

如果给定了函数的显式表达式,可以先设置自变量向量,然后根据表达式计算函数向量,从而用plot 等函数绘制出图形。但是当函数采用隐函数形式时,如:,则很难利用上述方法绘制图形。Matlab 提供了一个ezplot函数绘制隐函数图形。用法如下:

①对于函数f=f(x),ezplot的调用格式为:

ezplot(f),在默认区间(-2pi,2pi)绘制图形。

ezplot(f,[a,b]),在区间(a,b)绘制

②对于隐函数f=f(x,y),ezplot的调用格式为;

ezplot(f),在默认区间(-2pi,2pi),(-2pi,2pi)绘制f(x,y)=0的图形。

ezplot(f,[xmin,xmax,ymin,ymax]);在区间绘制图形。

ezplot(f,[a,b]),在区间(a,b),(a,b)绘制

③对于参数方程x=x(t),y=y(t),ezplot函数的调用格式为:

ezplot(x,y),在默认区间绘制x=x(t),y=y(t)图形。

ezplot(x,y,[tmin,tmax]),在区间(tmin,tmax)绘制x=x(t),y=y(t)图形。

例525 隐函数绘图举例。

s plot(2,2,1);

ezplot('x^2+y^2-9');axis eq l;

s plot(2,2,2);

ezplot('x^3+y^3-5*x*y+1/5')

s plot(2,2,3);

ezplot('cos(tan(pi*x))',[0,1]);

s plot(2,2,4);

ezplot('8*cos(t)','4*sqrt(2)*sin(t)',[0,2*pi])

rand(n):生成0到1之间的n阶随机数方阵rand(m,n):生成0到1之间的m×n的随机数矩阵(现成的函数)另外:Matlab随机数生成函数betarnd 贝塔分布的随机数生成器binornd 二项分布的随机数生成器chi2rnd 卡方分布的随机数生成器exprnd 指数分布的随机数生成器frnd f分布的随机数生成器gamrnd 伽玛分布的随机数生成器geornd 几何分布的随机数生成器hygernd 超几何分布的随机数生成器lognrnd 对数正态分布的随机数生成器nbinrnd 负二项分布的随机数生成器ncfrnd 非中心f分布的随机数生成器nctrnd 非中心t分布的随机数生成器ncx2rnd 非中心卡方分布的随机数生成器normrnd 正态(高斯)分布的随机数生成器poissrnd 泊松分布的随机数生成器raylrnd 瑞利分布的随机数生成器trnd 学生氏t分布的随机数生成器unidrnd 离散均匀分布的随机数生成器unifrnd 连续均匀分布的随机数生成器weibrnd 威布尔分布的随机数生成器

完整的中断向量表程序如下:

.global _vectors ;定义一个能被外部(C语言程序)引用的变量

.global _c_int00

.global _vector1

.global _vector2

.global _vector3

.global _vector1

.global _vector5

.global _vector6

.global _vector7

.global _vector8

.global _vector9

.global _vector10

.global _vector11 ; Hookup the c_int08 ISR(连接这个中断设置寄存器)in main()

.global _vector12 ; Hookup the c_int08 ISR in main()

.global _vector13

.global _vector14

.global _vector15

*------------------------------------------------------------------------------

* Global symbols referenced in this file but defined somewhere else.

* Remember that your interrupt service routines need to be referenced here.

*------------------------------------------------------------------------------

.ref _c_int00 ;reset ISR(复位中断设置寄存), .ref表明一个或多个在另一个模块中定义而在前模块中要用到的符号

*------------------------------------------------------------------------------

* This is a macro that instantiates one entry in the interrupt service table.

*------------------------------------------------------------------------------

VEC_ENTRY .macro addr ;中断返回函数

STW B0,*--B15

MVKL addr,B0

MVKH addr,B0

B B0

LDW *B15++,B0

NOP 2

NOP

NOP

.endm

*------------------------------------------------------------------------------

* This is a dummy interrupt service routine used to initialize the IST.

*------------------------------------------------------------------------------

_vec_dummy: ;初始化IST寄存器(中断向量表起始地址寄存器,用于设置中断服务程序存放的地址)

B B3

NOP 5

*------------------------------------------------------------------------------

* This is the actual interrupt service table (IST). It is properly aligned and

* is located in the subsection .text:vecs. This means if you don't explicitly

* specify this section in your linker command file, it will default and link

* into the .text section. Remember to set the ISTP(中断向量表起始地址寄存器)regis ter to point to this

* table.

*------------------------------------------------------------------------------

.sect ".vecs" ;定义初始化带名称的段

.align 1024 ;分配程序页

_vectors:

_vector0: VEC_ENTRY _c_int00 ;RESET(应用程序的入口)

_vector1: VEC_ENTRY _vec_dummy ;NMI(非屏蔽中断,用于处理极为关键的任务)

_vector2: VEC_ENTRY _vec_dummy ;RSVD

_vector3: VEC_ENTRY _vec_dummy

_vector4: VEC_ENTRY _vec_dummy

_vector5: VEC_ENTRY _vec_dummy

_vector6: VEC_ENTRY _vec_dummy

_vector7: VEC_ENTRY _vec_dummy

_vector8: VEC_ENTRY _vec_dummy

_vector9: VEC_ENTRY _vec_dummy

_vector10: VEC_ENTRY _vec_dummy

_vector11: VEC_ENTRY _vec_dummy ; Hookup the c_int08 ISR in main()

_vector12: VEC_ENTRY _vec_dummy ; Hookup the c_int08 ISR in main()

_vector13: VEC_ENTRY _vec_dummy

_vector14: VEC_ENTRY _vec_dummy

_vector15: VEC_ENTRY _vec_dummy

DM642的中断分析理解

在DSP的dm642平台上,以添加串口中断为例,分析理解其中断含义和过程。

对于dm642而言,其连接了752B来实现异步串行中断。752B产生inta和intb中断,经过cpld相与后连接dm642的外部中断5。因此该中断的实现,首先是要配置752B为中断模式,其次是添加DSP的外部中断5。具体过程如下。

1、在工程的*.asm文件中(如本人做的是dm642,因此文件名为ves_dm642)中添加优先级向量。

第一处修改如下:

*------------------------------------------------------------------------------

* Global symbols defined here and exported out of this file

*------------------------------------------------------------------------------

.global _vectors

.global _c_int00

.global _vector1

.global _vector2

.global _vector3

.global _vector4

.global _Uartio ;添加的串口中断

.global _vector6

.global _vector7

.global _vector8

.global _vector9

.global _vector10

.global _VPCapChaAIsr ; Hookup the c_int08 ISR in main()

.global _VPDispIsr ; Hookup the c_int08 ISR in main()

.global _vector13

.global _timer1 ;

.global _vector15

第二处修改如下:

.sect ".text:vecs"

.align 1024

_vectors:

_vector0: VEC_ENTRY _c_int00 ;RESET

_vector1: VEC_ENTRY _vec_dummy ;NMI

_vector2: VEC_ENTRY _vec_dummy ;RSVD

_vector3: VEC_ENTRY _vec_dummy

_vector4: VEC_ENTRY _vec_dummy

_vector5: VEC_ENTRY _Uartio ;添加串口中断,注意名称和上面得保持一致。_vector6: VEC_ENTRY _vec_dummy

_vector7: VEC_ENTRY _vec_dummy

_vector8: VEC_ENTRY _vec_dummy

_vector9: VEC_ENTRY _vec_dummy

_vector10: VEC_ENTRY _vec_dummy

_vector11: VEC_ENTRY _VPCapChaAIsr ; Hookup the c_int08 ISR in main()

_vector12: VEC_ENTRY _VPDispIsr ; Hookup the c_int08 ISR in main()

_vector13: VEC_ENTRY _vec_dummy

_vector14: VEC_ENTRY _timer1 ;

_vector15: VEC_ENTRY _vec_dummy

、main.c文件中初始化中断,代码如下:

IRQ_setVecs(vectors); //指向IRQ优先级向量表

IRQ_nmiEnable(); //int0-int3非屏蔽优先级中断使能

IRQ_globalEnable(); //全局中断使能

IRQ_map(IRQ_EVT_EXTINT5, 5);//串口中断,中断映射外部中断引脚5,EXT_INT5

IRQ_reset(IRQ_EVT_EXTINT5); //串口中断复位

IRQ_enable(IRQ_EVT_EXTINT5);//中断使能

需要说明的是,以上代码的顺序,不能更改。其中我们在asm文件中添加的是中断的优先级。其中0-3号优先级是不能占用的非屏蔽中断。用户只能添加4-15号优先级。因此首先由函数IRQ_setVecs(vectors)会统一加载,并通过IRQ_nmiEnable()函数使能非屏蔽中断。之后IRQ_globalEnable()使能所有中断,继而由IRQ_map()映射中断优先级和中断源。随后的IRQ_reset()是将某一特定中断源复位(清零),最后通过IRQ_enable()使能该中断(该函数是将特定中断与IER寄存器相或,因此应当先reset再enable)。

IRQ_EVT_EXTINT5是中断触发事件,在irq.h文件中由宏定义实现和相应中断ID映射。

3、在源文件中,添加中断处理函数。这里需要注意的是,因为在asm文件中添加的是_Uartio,故而中断函数名应当为Interrupt Uartio(void)。即函数名称前面只少了一个下划线。在该函数中添加中断任务即可。

griddata函数的已知数据点(X,Y)不要求规则排列,特别是对试验中随机没有规律采取的数据进行插值具有很好的效果。griddata(X,Y,XI,YI,'v4') v4是一种插值算法,没有具体的名字,原文称为“MATLAB 4 griddata method”,是一种很圆滑的差值算法,效果不错。X和Y提供的已知数据点,XI和YI是需要插值的数据点,一般使用meshgrid 生成,当然也可以其他数据,但是那样绘图的时候就比较麻烦,不能使用mesh等,只能使用trimesh。

示例如下:

a=[

3 3 1.5300

3 27 0.4210

5 17 0.5980

9 9 0.5900

13 25 0.4470

15 15 1

17 5 0.3830

21 21 0.3100

25 13 0.2830

27 3 0.2820

27 27 0.1200

];

x=a(:,1);

y=a(:,2);

z=a(:,3);

xtemp=linspace(min(x),max(x),100); ytemp=linspace(min(y),max(y),100); [X,Y]=meshgrid(xtemp,ytemp);

Z=griddata(x,y,z,X,Y,'v4');

surf(X,Y,Z)

shading interp

matlab 三维图形绘制实例

三维图形 一. 三维曲线 plot3(x1,y1,z1,选项1,x2,y2,z2,选项2,…,xn,yn,zn,选项n) 其中每一组x,y,z 组成一组曲线的坐标参数,选项的定义和plot 函数相同。当x,y ,z 是同维向量时,则x,y,z 对应元素构成一条三维曲线。当x,y ,z 是同维矩阵时,则以x,y,z 对应列元素绘制三维曲线,曲线条数等于矩阵列数。 Example1.绘制三维曲线。 程序如下: clf, t=0:pi/100:20*pi; x=sin(t); y=cos(t); z=t.*sin(t).*cos(t); %向量的乘除幂运算前面要加点 plot3(x,y,z); title('Line in 3-D Space'); xlabel('X');ylabel('Y');zlabel('Z'); grid on; 所的图形如下: -1 1 X Line in 3-D Space Y Z 二. 三维曲面 1. 产生三维数据 在MATLAB 中,利用meshgrid 函数产生平面区域内的网格坐标矩阵。

语句执行后,矩阵X 的每一行都是向量x ,行数等于向量y 的元素的个数,矩阵Y 的每一列都是向量y ,列数等于向量x 的元素的个数。 2. 绘制三维曲面的函数 surf 函数和mesh 函数 example2. 绘制三维曲面图z=sin(x+sin(y))-x/10。 程序如下: clf, [x,y]=meshgrid(0:0.25:4*pi); %产生平面坐标区域内的网格坐标矩阵 z=sin(x+sin(y))-x./10; surf(x,y,z); axis([0 4*pi 0 4*pi -2.5 1]); title('surf 函数所产生的曲面'); figure; mesh(x,y ,z); axis([0 4*pi 0 4*pi -2.5 1]); title('mesh 函数所产生的曲面'); -2.5 -2-1.5-1-0.500.51surf 函数所产生的曲面

matlab三维二维离散曲面画图教程

傅里叶变换 img=imread('RADU}4W~M9]09V7Q)ZQ5%~7.png'); %img=double(img); f=fft2(img); %傅里叶变换 f=fftshift(f); %使图像对称 r=real(f); %图像频域实部 i=imag(f); %图像频域虚部 margin=log(abs(f)); %图像幅度谱,加log便于显示 phase=log(angle(f)*180/pi); %图像相位谱 l=log(f); subplot(2,2,1),imshow(img),title('源图像'); subplot(2,2,2),imshow(l,[]),title('图像频谱'); subplot(2,2,3),imshow(margin,[]),title('图像幅度谱'); subplot(2,2,4),imshow(phase,[]),title('图像相位谱'); https://www.360docs.net/doc/c418085521.html,/s/blog_1667198560102wmzu.html 傅里叶变换 I = imread('RADU}4W~M9]09V7Q)ZQ5%~7.png'); %读入数字图像 I = rgb2gray(I);%将图像进行灰度处理 J = fft2(I);%将图像实行傅里叶变换 figure,imshow(I);%这里能得到频谱图 J = fftshift(J); figure,imshow(log(abs(J)),[]); %将频谱平移 J(abs(J)<5)=0;%不必要的过滤掉 figure,imshow(log(abs(J)+eps),[]); J = ifftshift(J);K = ifft2(J);figure,imshow(K,[0 255]);%傅里叶逆变换 自己所写的代码 I = imread('RADU}4W~M9]09V7Q)ZQ5%~7.png'); %读入数字图像 J = fft2(I); %将图像实行傅里叶变换figure,imshow(I); %这里能得到频谱图 J = fftshift(J); figure,imshow(log(abs(J)),[]); %将频谱平移 J(abs(J)<5)=0; %不必要的过滤掉figure,imshow(log(abs(J)+eps),[]); J = ifftshift(J);K = ifft2(J); ss=real(ifft2(J));sss=uint8(ss);subplot(1,2,2); imshow(sss) figure,imshow(K,[0 255]); %傅里叶逆变换

matble课程论文(MATLAB在三维作图中的应用)

《MATLAB》课程论文 MATLAB在三维作图中的应用 姓名: 学号: 专业: 班级: 指导老师: 学院: 完成日期:

MATLAB在三维作图中的应用 [摘要]MATLAB提供了一系列的绘图函数,用户不仅不许考虑绘图细节,只需给出一些基本的参数就能得到所需要的图形,这一类函数称为高层绘图函数。除此之外,MATLAB还提供了直接对句柄进行操作的一系列的低层的绘图操作。这类操作将图形的每个元素看做是一个独立的对象,系统给每个对象独立的分配一个句柄,以后可以通过该句柄对改图元素进行操作,而不影响图形的其他部分。高层绘图操作简单明了,方便高效,使用户最常使用的绘图方法,而低层绘图操作控制和表现图形的能力更强,为用户自主绘图创造了条件。其实MATLAB的高层绘图函数都是利用低层绘图函数建立起来的。所以MATLAB的计算准确、效率高、使用快捷等优点常被广泛应用于科学和工程领域. [关键字]MATLAB语言三维图形图像处理绘制 一,问题的提出 MATLAB语言是当前国际学科界应用很广泛的一种软件,强大的绘图功能是MATLAB的特点之一。MATLAB提供了一系列的绘图函数,利用它强大的图像处理来绘制三维图形既简单而且也很方便。在绘制三维图形的过程中也用到了MATLAB语言的其他功能,绘制三维图形时用到了它提供的一些函数,利用这些函数可以方便的生成一些特殊矩阵,因此可生成一个坐标平面。MATLAB语言强大的功能也在二维三维绘图中的得到了很广泛的应用,利用它所提供的精细的图像处理功能,如MATLAB还提 供了直接对句柄进行操作的一系列的低层的绘图操作。这类操作将图形的每个元素看做是一个独立的对象,系统给每个对象独立的分配一个句柄,以后可以通过该句柄对改图元素进行操作,而不影响图形的其他部分。高层绘图操作简单明了,使用户最常使用的绘图方法,而低层绘图操作控制和表现图形的能力更强,为用户自主绘图创造了条件,还可以对所绘制的三维图形作一个修饰的处理。MATLAB语言具有强大的以图形化显示矩阵和数组的能力,同时它给这些图形增加注释并且可以对图形进行标注和打印。MATLAB的图形技术包括三维的可视化、图形处理、动画等高层次的专业图形的高级绘图,例如图形的光照处理、色度处理以及四维数据的表现等。那么,如何把它强大的功能应用于实际应用中,下面我们将用实例说明MATBLE在三维作图中的应用。 二,MATLAB的主要功能及特点 MATLAB近几年广泛用于图像处理和识别, 使用MATLAB设计模式识别应用软件将使设

实验Matlab三维作图的绘制

实验9 三维绘图 一、实验目的 学会MATLAB软件中三维绘图的方法。 二、实验内容与要求 1.三维曲线图 格式一:plot3(X,Y,Z,S). 说明:当X,Y,Z均为同维向量时,则plot3描出点X(i),Y(i),Z(i)依次相连的空间曲线.若X,Y均为同维矩阵,X,Y,Z每一组相应列向量为坐标画出一条曲线,S为‘color﹣linestyle﹣marker’控制字符表1.6~表1.10. 【例1.79】绘制螺旋线. >>t=0:pi/60:10*pi; >>x=sin(t); >>y=cos(t); >>plot3(x,y,t,’*-b’) >>grid on 图形的结果如图1.16所示. 格式二:comet3(x,y,z). 说明:显示一个彗星通过数据x,y,z确定的三维曲线. 【例1.80】 >>t=-20*pi:pi/50:20*pi; >>comet3(sin(t),cos(t),t) 可见到彗星头(一个小圆圈)沿着数据指定的轨道前进的动画图象,彗星轨道为整个函数所画的螺旋线. 格式三:fill3(X,Y,Z,C) ℅填充由参数X,Y,Z确定的多边形,参数C指定颜色. 图1.16 例1.79图形结果图1.17 例1.81图形结果 【例1.81】

>>X=[2,1,2;9,7,1;6,7,0]; >>Y=[1,7,0;4,7,9;0,4,3]; >>Z=[1,8,6;7,9,6;1,6,1]; >>C=[1,0,0;0,1,0;0,0,1] >>fill3(X,Y,Z,C) >>grid on 图形的结果如图1.17所示. 问题1.30:图1.17中每个三角形按什么规律画出的?(用X,Y,Z的对应列元素值为坐标画三角形)每个三角形内填充的颜色又有何规律?(用C 第i列元素值对应的颜色,从第i个三角形对应顶点向中心过渡)若C=[1,5,10;1,5,10;1,5,10],结果如何? 2.三维网格图 格式:mesh(X,Y,Z,C) ℅画出颜色由C指定的三维网格图. meshc(X,Y,Z,C) ℅画出带有等高线的三维网格图. meshz(X,Y,Z,C) ℅画出带有底座的三维网格图. 说明:若X与Y均为向量,n=length(X),m=length(Y), Z必须满足[m,n]=size(Z),则空间中的点(X(j),Y(i),Z(i,j))为所画曲面网线的交点,X 对应于Z的列,Y对应于Z的行;若X,Y,Z均为同维矩阵,则空间中的点(X(i,j),Y(i,j),Z(i,j))为所画曲面的网线的交点;矩阵C指定网线的颜色,MATLAB对矩阵C中的数据进行线性处理,以便从当前色图中获得有用的颜色,若C缺省,网线颜色和曲面的高度Z相匹配. 在三维作图常用到命令meshgrid,其功能是生成二元函数z=f(x,y)中x-y平面上的矩形定义域中数据点矩阵X和Y. 格式:[X,Y]= meshgrid(x,y). 说明:输入向量x为x-y平面上x轴的值,向量y为x-y平面上y轴的值.输出矩阵X为x-y平面上数据点的横坐标值,输出矩阵Y为x-y平面上数据点的纵坐标值. 【例1.82】 >> x=1:4; >> y=1:5; >> [x,y]=meshgrid(x,y) x = 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 y = 1 1 1 1

教你如何用matlab绘图(全面)

强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数。此外,Matlab还提供了直接对图形句柄进行操作的低层绘图操作。这类操作将图形的每个图形元素(如坐标轴、曲线、文字等)看做一个独立的对象,系统给每个对象分配一个句柄,可以通过句柄对该图形元素进行操作,而不影响其他部分。 本章介绍绘制二维和三维图形的高层绘图函数以及其他图形控制函数的使用方法,在此基础上,再介绍可以操作和控制各种图形对象的低层绘图操作。 一.二维绘图 二维图形是将平面坐标上的数据点连接起来的平面图形。可以采用不同的坐标系,如直角坐标、对数坐标、极坐标等。二维图形的绘制是其他绘图操作的基础。 一.绘制二维曲线的基本函数 在Matlab中,最基本而且应用最为广泛的绘图函数为plot,利用它可以在二维平面上绘制出不同的曲线。 1.plot函数的基本用法 plot函数用于绘制二维平面上的线性坐标曲线图,要提供一组x坐标和对应的y坐标,可以绘制分别以x和y为横、纵坐标的二维曲线。plot函数的应用格式 plot(x,y) 其中x,y为长度相同的向量,存储x坐标和y坐标。 例51 在[0 , 2pi]区间,绘制曲线 程序如下:在命令窗口中输入以下命令 >> x=0:pi/100:2*pi; >> y=2*exp(-0.5*x).*sin(2*pi*x); >> plot(x,y) 程序执行后,打开一个图形窗口,在其中绘制出如下曲线 注意:指数函数和正弦函数之间要用点乘运算,因为二者是向量。 例52 绘制曲线 这是以参数形式给出的曲线方程,只要给定参数向量,再分别求出x,y向量即可输出曲线:

matlab绘制动态三维心形代码(蛋疼的情人节奉献)

Matlab绘制三维动态心形 It’s OK to send a pic to your girlfriend on Valentine's Day 情人节蛋疼玩意 效果图: 原始代码: %仅供参考,自助修改,原则上自己动手,要是非常强烈的要帮忙 %可以联系我的QQ 865802870 ,但愿我还在上面. Source code: %构造体积方程和坐标轴,画出图形;linspace(a,b,c)均匀生成介于a到b的c个值,c 的默认为100。Meshgrid生成矩阵网格。 [X,Y,Z] = meshgrid(linspace(-3,3,101)); %3D心型图方程如下; F = -X.^2.*Z.^3-(9/80).*Y.^2.*Z.^3+(X.^2+(9/4).*Y.^2+Z.^2-1).^3; hFigure = figure; sz = get(hFigure, 'Position'); set(hFigure, 'Position', [sz(1)-0.15*sz(3) sz(2) 1.3*sz(3) sz(4)]); set(hFigure,'color','w', 'menu','none') hAxes = axes('Parent',hFigure,'NextPlot','add',... 'DataAspectRatio',[1 1 1],... 'XLim',[30 120],'YLim',[35 65],'ZLim',[30 75]); view([-39 30]); axis off % 制作出动态的隐形效果; hidden on

% 画出网格,制作网格动态效果; % 快渲染心得背面: p = patch(isosurface(F,-0.001)); set(p,'FaceColor','w','EdgeColor','w'); % 构造Y-Z平面,,描完函数在该平面的点: for iX = [35 38 41 45 48 51 54 57 61 64 67] plane = reshape(F(:,iX,:),101,101); cData = contourc(plane,[0 0]); xData = iX.*ones(1,cData(2,1)); plot3(hAxes,xData,cData(2,2:end),cData(1,2:end),'r'); pause(.1), drawnow end % 构造X-Z平面,描完函数在该平面的点: for iY = [41 44 47 51 55 58 61] plane = reshape(F(iY,:,:),101,101); cData = contourc(plane,[0 0]); yData = iY.*ones(1,cData(2,1)); plot3(hAxes,cData(2,2:end),yData,cData(1,2:end),'r'); pause(.1), drawnow end % 构造X-Y平面,描完函数在该平面的点: for iZ = [36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 69 71] plane = F(:,:,iZ); cData = contourc(plane,[0 0]); startIndex = 1; if size(cData,2) > (cData(2,1)+1) startIndex = cData(2,1)+2; zData = iZ.*ones(1,cData(2,1)); plot3(hAxes,cData(1,2:(startIndex-1)),... cData(2,2:(startIndex-1)),zData,'r'); end zData = iZ.*ones(1,cData(2,startIndex)); plot3(hAxes,cData(1,(startIndex+1):end),... cData(2,(startIndex+1):end),zData,'r'); pause(.1), drawnow end %给三维心着色

matlab画三维曲面图

Matlab画三维曲面图 对于如下的数据,如何才能在matlab中画出三维图形. 620 0.03 110 620 0.07 112 630 0.07 119 645 0.02 210 650 0.02 200 650 0.03 230 650 0.06 145 650 0.08 155 655 0.01 180 655 0.06 145 660 0.05 150 680 0.02 175 680 0.04 170 680 0.06 145 680 0.08 155 x y z Matabl程序如下: %%定义数据 x=[620 620 630 645 650 650 650 650 655 655 660 680 680 680 680]; y=[0.03 0.07 0.07 0.02 0.02 0.03 0.06 0.08 0.01 0.06 0.05 0.02 0.04 0.06 0.08]; z=[110 112 119 210 200 230 145 155 180 145 150 175 170 145 155]; %%画图函数部分,参考https://www.360docs.net/doc/c418085521.html,/thread-128595-1-1.html cbboy编写的函数%% function PlotGriddata(x,y,z) mx=min(x); %求x的最小值 Mx=max(x); %求x的最大值 my=min(y); My=max(y); Nx=20; %定义x轴插值数据点数,根据实际情况确定 Ny=20; %定义y轴插值数据点数,根据实际情况确定 cx=linspace(mx,Mx,Nx);%在原始x数据的最大值最小值之间等间隔生成Nx个插值点 cy=linspace(my,My,Ny);%在原始数据y的最大值最小值之间等间隔生成Ny个插值点 cz=griddata(x,y,z,cx,cy','cubic');%调用matlab函数进行立方插值,插值方式还有'v4'、'linear' surf(cx,cy,cz); %meshz(cx,cy,cz) %绘制曲面

matlab各种三维绘图及实例

Matlab绘制三维图形 三维曲线 plot3函数与plot函数用法十分相似,其调用格式为: plot3(x1,y1,z1,选项1,x2,y2,z2,选项2,…,xn,yn,zn,选项n) 其中每一组x,y,z组成一组曲线的坐标参数,选项的定义和plot函数相同。当x,y,z是同维向量时,则x,y,z 对应元素构成一条三维曲线。当x,y,z是同维矩阵时,则以x,y,z对应列元素绘制三维曲线,曲线条数等于矩阵列数。 例绘制三维曲线。 程序如下: t=0:pi/100:20*pi; x=sin(t); y=cos(t); z=t.*sin(t).*cos(t); plot3(x,y,z); title('Line in 3-D Space'); xlabel('X');ylabel('Y');zlabel('Z'); 三维曲面 1.产生三维数据 在MATLAB中,利用meshgrid函数产生平面区域内的网格坐标矩阵。其格式为: x=a:d1:b; y=c:d2:d; [X,Y]=meshgrid(x,y); 语句执行后,矩阵X的每一行都是向量x,行数等于向量y的元素的个数,矩阵Y的每一列都是向量y,列数等于向量x的元素的个数。 2.绘制三维曲面的函数 surf函数和mesh函数的调用格式为: mesh(x,y,z,c):画网格曲面,将数据点在空间中描出,并连成网格。 surf(x,y,z,c):画完整曲面,将数据点所表示曲面画出。 一般情况下,x,y,z是维数相同的矩阵。x,y是网格坐标矩阵,z是网格点上的高度矩阵,c 用于指定在不同高度下的颜色范围。 例绘制三维曲面图z=sin(x+sin(y))-x/10。 程序如下: [x,y]=meshgrid(0:0.25:4*pi); %在[0,4pi]×[0,4pi]区域生成网格坐标 z=sin(x+sin(y))-x/10; mesh(x,y,z); axis([0 4*pi 0 4*pi -2.5 1]); 此外,还有带等高线的三维网格曲面函数meshc和带底座的三维网格曲面函数meshz。其用法与mesh类似,不同的是meshc还在xy平面上绘制曲面在z轴方向的等高线,meshz还在xy平面上绘制曲面的底座。 例在xy平面内选择区域[-8,8]×[-8,8],绘制4种三维曲面图。 程序如下: [x,y]=meshgrid(-8:0.5:8); z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2+eps); subplot(2,2,1);

使用matlab绘制三维图形的方法

使用matlab 绘制三维图形的方法 三维曲线 plot3函数与plot 函数用法十分相似,其调用格式为: plot3(x1,y1,z1,选项1,x2,y2,z2,选项2,…,xn,yn,zn,选项n),其中每一组x,y,z 组成一组曲线的坐标参数,选项的定义和plot 函数相同。当x,y,z 是同维向量时,则x,y,z 对应元素构成一条三维曲线。当x,y,z 是同维矩阵时,则以x,y,z 对应列元素绘制三维曲线,曲线条数等于矩阵列数。 例 绘制三维曲线。 程序如下: t=0:pi/100:20*pi; x=sin(t); y=cos(t); z=t.*sin(t).*cos(t); plot3(x,y,z);grid title('Line in 3-D Space'); xlabel('X');ylabel('Y');zlabel('Z'); 如下图: -1 1 X Line in 3-D Space Y Z

三维曲面 1.产生三维数据 在MATLAB 中,利用meshgrid 函数产生平面区域内的网格坐标矩阵。其格式为: x=a:d1:b; y=c:d2:d; [X,Y]=meshgrid(x,y); 语句执行后,矩阵X 的每一行都是向量x ,行数等于向量y 的元素的个数,矩阵Y 的每一列都是向量y ,列数等于向量x 的元素的个数。 2.绘制三维曲面的函数 surf 函数和mesh 函数的调用格式为: mesh(x,y,z,c):画网格曲面,将数据点在空间中描出,并连成网格。 surf(x,y,z,c):画完整曲面,将数据点所表示曲面画出。 一般情况下,x,y,z 是维数相同的矩阵。x,y 是网格坐标矩阵,z 是网格点上的高度矩阵,c 用于指定在不同高度下的颜色范围。 例 绘制三维曲面图z=sin(x+sin(y))-x/10。 程序如下: [x,y]=meshgrid(0:0.25:4*pi); %在[0,4pi]×[0,4pi]区域生成网格坐标 z=sin(x+sin(y))-x/10; mesh(x,y,z); axis([0 4*pi 0 4*pi -2.5 1]); 如下图: -2.5 -2-1.5-1-0.500.51 此外,还有带等高线的三维网格曲面函数meshc 和带底座的三维网格曲面函数meshz 。其用法与mesh 类似,不同的是meshc 还在xy 平面上绘制曲面在z 轴方

使用matlab绘制三维图形的方法

matlab 绘制三维图形的方法 plot3函数与plot 函数用法十分相似,其调用格式为: plot3(x1,y1,z1,选项1,x2,y2,z2,选项2,…,xn,yn,zn,选项n),其中每一组x,y,z 组成一组曲线的坐标参数,选项的定义和plot 函数相同。当x,y,z 是同维向量时,则x,y,z 对应元素构成一条三维曲线。当x,y,z 是同维矩阵时,则以x,y,z 对应列元素绘制三维曲线,曲线条数等于矩阵列数。 例 绘制三维曲线。 程序如下: t=0:pi/100:20*pi; x=sin(t); y=cos(t); z=t.*sin(t).*cos(t); plot3(x,y,z);grid title('Line in 3-D Space'); xlabel('X');ylabel('Y');zlabel('Z'); 如下图: -1 1 X Line in 3-D Space Y Z 三维曲面

1.产生三维数据 在MATLAB 中,利用meshgrid 函数产生平面区域内的网格坐标矩阵。其格式为: x=a:d1:b; y=c:d2:d; [X,Y]=meshgrid(x,y); 语句执行后,矩阵X 的每一行都是向量x ,行数等于向量y 的元素的个数,矩阵Y 的每一列都是向量y ,列数等于向量x 的元素的个数。 2.绘制三维曲面的函数 surf 函数和mesh 函数的调用格式为: mesh(x,y,z,c):画网格曲面,将数据点在空间中描出,并连成网格。 surf(x,y,z,c):画完整曲面,将数据点所表示曲面画出。 一般情况下,x,y,z 是维数相同的矩阵。x,y 是网格坐标矩阵,z 是网格点上的高度矩阵,c 用于指定在不同高度下的颜色范围。 例 绘制三维曲面图z=sin(x+sin(y))-x/10。 程序如下: [x,y]=meshgrid(0:0.25:4*pi); %在[0,4pi]×[0,4pi]区域生成网格坐标 z=sin(x+sin(y))-x/10; mesh(x,y,z); axis([0 4*pi 0 4*pi -2.5 1]); 如下图: -2.5 -2-1.5-1-0.500.51 此外,还有带等高线的三维网格曲面函数meshc 和带底座的三维网格曲面函数meshz 。其用法与mesh 类似,不同的是meshc 还在xy 平面上绘制曲面在z 轴方向的等高线,meshz 还在xy 平面上绘制曲面的底座。 例 在xy 平面内选择区域[-8,8]×[-8,8],绘制4种三维曲面图。 程序如下:

matlab的三维图形绘制三维制图方法解说

三维图形 一. 三维曲线 plot3(x1,y1,z1,选项1,x2,y2,z2,选项2,…,xn,yn,zn,选项n) 其中每一组x,y,z 组成一组曲线的坐标参数,选项的定义和plot 函数相同。当x,y,z 是同维向量时,则x,y,z 对应元素构成一条三维曲线。当x,y,z 是同维矩阵时,则以x,y,z 对应列元素绘制三维曲线,曲线条数等于矩阵列数。 Example1.绘制三维曲线。 程序如下: clf, t=0:pi/100:20*pi; x=sin(t); y=cos(t); z=t.*sin(t).*cos(t); %向量的乘除幂运算前面要加点 plot3(x,y,z); title('Line in 3-D Space'); xlabel('X');ylabel('Y');zlabel('Z'); grid on; 所的图形如下: X Line in 3-D Space Y Z 二. 三维曲面 1. 产生三维数据 在MATLAB 中,利用meshgrid 函数产生平面区域内的网格坐标矩阵。 语句执行后,矩阵X 的每一行都是向量x ,行数等于向量y 的元素的个数,矩阵Y 的每

一列都是向量y ,列数等于向量x 的元素的个数。 2. 绘制三维曲面的函数 surf 函数和mesh 函数 example2. 绘制三维曲面图z=sin(x+sin(y))-x/10。 程序如下: clf, [x,y]=meshgrid(0:0.25:4*pi); %产生平面坐标区域内的网格坐标矩阵 z=sin(x+sin(y))-x./10; surf(x,y,z); axis([0 4*pi 0 4*pi -2.5 1]); title('surf 函数所产生的曲面'); figure; mesh(x,y,z); axis([0 4*pi 0 4*pi -2.5 1]); title('mesh 函数所产生的曲面'); -2.5 -2-1.5-1-0.500.51surf 函数所产生的曲面

Matlab绘图-很详细,很全面

Matlab绘图 强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数。此外,Matlab还提供了直接对图形句柄进行操作的低层绘图操作。这类操作将图形的每个图形元素(如坐标轴、曲线、文字等)看做一个独立的对象,系统给每个对象分配一个句柄,可以通过句柄对该图形元素进行操作,而不影响其他部分。 本章介绍绘制二维和三维图形的高层绘图函数以及其他图形控制函数的使用方法,在此基础上,再介绍可以操作和控制各种图形对象的低层绘图操作。 一.二维绘图 二维图形是将平面坐标上的数据点连接起来的平面图形。可以采用不同的坐标系,如直角坐标、对数坐标、极坐标等。二维图形的绘制是其他绘图操作的基础。 一.绘制二维曲线的基本函数 在Matlab中,最基本而且应用最为广泛的绘图函数为plot,利用它可以在二维平面上绘制出不同的曲线。 1.plot函数的基本用法 plot函数用于绘制二维平面上的线性坐标曲线图,要提供一组x坐标和对应的y坐标,可以绘制分别以x和y为横、纵坐标的二维曲线。plot函数的应用格式 plot(x,y) 其中x,y为长度相同的向量,存储x坐标和y坐标。 例51 在[0 , 2pi]区间,绘制曲线 程序如下:在命令窗口中输入以下命令 >> x=0:pi/100:2*pi; >> y=2*exp(-0.5*x).*sin(2*pi*x); >> plot(x,y) 程序执行后,打开一个图形窗口,在其中绘制出如下曲线 注意:指数函数和正弦函数之间要用点乘运算,因为二者是向量。 例52 绘制曲线 这是以参数形式给出的曲线方程,只要给定参数向量,再分别求出x,y向量即可输出曲线:>> t=-pi:pi/100:pi; >> x=t.*cos(3*t); >> y=t.*sin(t).*sin(t);

应用MATLAB绘制二次曲面图

应用MATLAB 绘制二次曲面图 1、用surf 工mesh 函数绘图 Surf 函数绘制的是三维表面图,mesh 函数绘制的是三维网格图,当二次曲面方程是标准方程时,原方程式可化为),(),,(),,(x z f y z y f x y x f z ===时,我们就用这两种函数完成绘图。 例1、绘曲面①11694222=++z y x ②11694222=-+z y x ③4 9422z y x =+在区域 44,33,22≤≤-≤≤-≤≤-z y x 上的图像。 解:以上三个方程化为:941422y x z --±=、19 4422-+±=y x z 、9422y x z +=; 2、用plot3或contour3函数绘图 plot3函数绘制的是三维直角坐标曲线图,contour3函数绘制的是三维等高曲线图。 x=-2:0.1:2;y=-3:0.1:3; [x,y]=meshgrid(x,y); z1=4.*sqrt(1-(x.^2)./4-(y.^2)./9); z2=-4.*sqrt(1-(x.^2)./4-(y.^2)./9); subplot(2,3,1); plot3(x,y,z1); hold on ; plot3(x,y,z2) grid on 3、用ezsurf 或ezmesh 函数绘图 Ezsurf 函数和ezmesh 函数主要针对参数方程的三维作图函数,它们是专业作图函数,ezsurf 绘制三维表面图,ezmesh 绘制三维网格图,当二次曲面可化为参数方程时,就可以用这两种函数完成绘图。 椭球方程的参数方程为:?? ???===ββαβαsin 4cos sin 3cos cos 2z y x ( 22, *20pi pi pi ≤≤-≤≤βα) 双曲方程的参数方程为:?????-±===14sin 3cos 22t z t y t x αα (1, *20≥≤≤t pi α或1≤t )

上机习题6 MATLAB7.0三维绘图

实验六MATLAB7.0三维绘图实验目的: ①掌握绘制三维图能形的方法; ②掌握图形修饰处理方法; ③知道图像处理方法,了解动画制作方法。 实验要求:给出程序和实验结果。 实验内容: 一、绘制三维曲线 sin() cos() sin()cos() x t y t z t t t = ? ? = ? ?= ? 二、绘制三维曲面图z=sin(x+sin(y))-x/10。 三、绘制z=x2+y2的三维网线图形; 四、绘制三维陀螺锥面; (仅供参考: t1=0:0.1:0.9; t2=1:0.1:2; r=[t1 -t2+2]; [x,y,z]=cylinder(r,30); surf(x,y,z); grid ) 五、在xy平面内选择区域[-8,8]×[-8,8],利用mesh、meshc、meshz和surf绘 制/ z= 六、绘制光照处理后的球面,取三个不同的光照位置进行比较。(提示:可以利用函数sphere和light) 七、利用peaks产生数据,绘制多峰曲面图。 八. 2 2y x xe z- - =,当x和y的取值范围均为-2到2时,用建立子窗口的方法在同 一个图形窗口中绘制出三维线图、网线图、表面图和带渲染效果的表面图。

九绘制peaks函数的表面图,用colormap函数改变预置的色图,观察色彩的分布情况。 十、用sphere函数产生球表面坐标,绘制不透明网线图、透明网线图、表面图和带剪孔的表面图。 十一、将5.9题中的带剪孔的球形表面图的坐标改变为正方形,以使球面看起来是圆的而不是椭圆的,然后关闭坐标轴的显示。 实验结果: (1)

(2) (3) (4)

matlab-三维曲面的自动绘制

一、设计目的 Matlab 有两类绘图命令,一类是直接对图形句柄进行操作的低层绘图命令,另一类是在低层命令基础上建立起来的高层绘图命令。高层绘图命令简单明了、方便高效。利用高层绘图函数,用户不需过多考虑绘图细节,只需给出一些基本参数就能得到所需图形。在三维曲面的绘制中,Matlab提供了meshgrid 函数、mesh waterfall、函数、surf函数、Surfl函数和patch函数。他们的使用方法基本相同。在Matlab中,为了表现图形的显示效果,提供了一些控制函数,有视角的控制、光度的控制、色彩的控制和透明度的控制等。在三维图形的最佳视觉效果中,Matlab提供了两种方法:一是改变观看的角度(视角),二是旋转图形。视角由函数view控制,旋转有两个指令:rotate和rotate3d。光照的控制主要有camlight指令、lighting 指令、material函数、light函数、lightangle函数。色彩控制包括颜色的向量表示、色图、三维表面图形的着色以及浓淡处理。图形的透明值用0和1之间的值表示,常用alpha来说明。 二、设计思路 绘制所代表的三维曲面图,先要在平面选定一矩形区域,假定矩形区域,然后将在方向分成份,将在方向分成份,由各划分点分别作平行于两坐标轴的直线,将区域D分成个小矩形,生成代表每一个小矩形顶点坐标的平面网格坐标矩阵,最后利用有关函数求对应网格坐标的Z矩阵。 在MATLAB中,利用meshgrid函数产生平面区域内的网格坐标矩阵。其格式为: x=a:d1:b;y=c:d2:d; [X,Y]= meshgrid(x,y); 语句执行后,矩阵X的每一行都是向量x,行数等于向量y的元素的个数,矩阵Y的每一列都是向量y,列数等于向量x的元素的个数。当x=y时,meshgrid 函数可写成meshgrid(x)。 当函数不能简单表示出来时,便只能用for循环或while循环来计算z的元素。不过在很多情况下,可以按行或按列计算z,优势必须一个一个地计算z 中的元素,这是用嵌套循环进行计算。 三、设计程序及说明 绘制三维曲面 MATLAB提供了mesh函数和surf函数来绘制三维曲面图。surf函数和mesh 函数的调用格式为: mesh(x,y,z,c):画网格曲面,将数据点在空间中描出,并连成网格。 surf(x,y,z,c):画完整曲面,将数据点所表示曲面画出。 一般情况下,x,y,z是维数相同的矩阵。x,y是网格坐标矩阵,z是网格点上的高度矩阵,c用于指定在不同高度下的颜色范围。 1.1 绘制三维曲面图z=sin(x+sin(y))-x/10。

Matlab绘制常见三维图形

Matlab绘制常见三维图形[转] (2011-02-18 21:07:40) 转载 分类:MATLAB 标签: matlab三维图形 杂谈 %% a.画椭球 a=1;b=2;c=3; figure(1),title('椭球') ellipsoid(0,0,0,a,b,c) % shading interp box on; grid off colormap hsv %% b.单叶双曲面 [x,y]=meshgrid(-2:0.2:2,-2:0.2:2); z=sqrt(c.^2*(x.^2/(a.^2)+y.^2/(b.^2)-1)); % figure(2) subplot(121),title('单叶双曲面') surf(x,y,real(z)) hold on; surf(x,y,-real(z)) % [u,v]=meshgrid(linspace(0,2*pi,50),linspace(-1*pi/2,pi/2,50)); x=a.*sec(v).*cos(u); y=a.*sec(v).*sin(u); z=c.*tan(v); subplot(122),title('单叶双曲面') surf(x,y,z) % shading interp box on; grid off colormap hsv %% c.双叶双曲面

[x,y]=meshgrid(-2:0.2:2,-2:0.2:2); z=sqrt(c.^2*(x.^2/(a.^2)-y.^2/(b.^2)-1)); % figure(3) subplot(121),title('双叶双曲面') surf(x,y,real(z)) hold on; surf(x,y,-real(z)) % [u,v]=meshgrid(linspace(0,2*pi,50),linspace(-1*pi/2,3*pi/2,50)); x=a.*tan(v).*cos(u); y=a.*tan(v).*sin(u); z=c.*sec(v); subplot(122),title('单叶双曲面') mesh(x,y,z) % shading interp box on; grid off colormap hsv %% d.椭圆抛物面 [x,y]=meshgrid(-2:0.2:2,-2:0.2:2); z=(x.^2/(a.^2)+y.^2/(b.^2))./2; % figure(4),title('椭圆抛物面') surf(x,y,z) % colormap gray %% e.马鞍面 [x,y]=meshgrid(-2:0.2:2,-2:0.2:2); z=(x.^2/(a.^2) - 2.*y.^2/(b.^2)); % figure(5),title('马鞍面') surf(x,y,z) % shading interp

Matlab绘制三维图

二.三维绘图 一.绘制三维曲线的基本函数 最基本的三维图形函数为plot3,它将二维绘图函数plot的有关功能扩展到三维空间,可以用来绘制三维曲线。其调用格式为: plot3(x1,y1,z1,选项1,x2,y2,z2,选项2,…) 其中每一组x,y,z组成一组曲线的坐标参数,选项的定义和plot的选项一样。当x,y,z是同维向量时,则x,y,z对应元素构成一条三维曲线。当x,y,z是同维矩阵时,则以x,y,z对应列元素绘制三维曲线,曲线条数等于矩阵的列数。 例513 绘制空间曲线 该曲线对应的参数方程为 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; 二.三维曲面 1.平面网格坐标矩阵的生成 当绘制z=f(x,y)所代表的三维曲面图时,先要在xy平面选定一矩形区域,假定矩形区域为D=[a,b]×[c,d],然后将[a,b]在x方向分成m份,将[c,d]在y方向分成n份,由各划分点做平行轴的直线,把区域D分成m×n个小矩形。生成代表每一个小矩形顶点坐标的平面网格坐标矩阵,最后利用有关函数绘图。 产生平面区域内的网格坐标矩阵有两种方法: 利用矩阵运算生成。 x=a:dx:b; y=(c:dy:d)’; X=ones(size(y))*x;

Y=y*ones(size(x)); 经过上述语句执行后,矩阵X的每一行都是向量x,行数等于向量y的元素个数,矩阵Y的每一列都是向量y,列数等于向量x的元素个数。 利用meshgrid函数生成; x=a:dx:b; y=c:dy:d; [X,Y]=meshgrid(x,y); 语句执行后,所得到的网格坐标矩阵和上法,相同,当x=y时,可以写成meshgrid(x) 2.绘制三维曲面的函数 Matlab提供了mesh函数和surf函数来绘制三维曲面图。mesh函数用来绘制三维网格图,而surf 用来绘制三维曲面图,各线条之间的补面用颜色填充。其调用格式为: mesh(x,y,z,c) surf(x,y,z,c) 一般情况下,x,y,z是维数相同的矩阵,x,y是网格坐标矩阵,z是网格点上的高度矩阵,c用于指定在不同高度下的颜色范围。c省略时,Matlab认为c=z,也即颜色的设定是正比于图形的高度的。这样就可以得到层次分明的三维图形。当x,y省略时,把z矩阵的列下标当作x轴的坐标,把z矩阵的行下标当作y轴的坐标,然后绘制三维图形。当x,y是向量时,要求x的长度必须等于z矩阵的列,y的长度必须等于必须等于z的行,x,y向量元素的组合构成网格点的x,y坐标,z坐标则取自z矩阵,然后绘制三维曲线。 例515 用三维曲面图表现函数: 为了便于分析三维曲面的各种特征,下面画出3种不同形式的曲面。 %program 1 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'); pause; %program 2 x=0:0.1:2*pi;

相关文档
最新文档