基于MATLAB语言的三维图形的绘制.docx
- 文档编号:18162955
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:13
- 大小:106.18KB
基于MATLAB语言的三维图形的绘制.docx
《基于MATLAB语言的三维图形的绘制.docx》由会员分享,可在线阅读,更多相关《基于MATLAB语言的三维图形的绘制.docx(13页珍藏版)》请在冰点文库上搜索。
基于MATLAB语言的三维图形的绘制
《MATLAB语言》课程论文
基于MATLAB语言的三维图形的绘制
姓名:
***
学号:
***********
专业:
通信工程
班级:
2010级通信1班
指导老师:
***
学院:
物理电气信息学院
完成日期:
2011.12.15
基于MATLAB语言的三维图形的绘制
(杨文莲120102453882010级通信1班)
[摘要]MATLAB提供了一系列的绘图函数,用户不仅不许考虑绘图细节,只需给出一些基本的参数就能得到所需要的图形,这一类函数称为高层绘图函数。
除此之外,MATLAB还提供了直接对句柄进行操作的一系列的低层的绘图操作。
这类操作将图形的每个元素看做是一个独立的对象,系统给每个对象独立的分配一个句柄,以后可以通过该句柄对改图元素进行操作,而不影响图形的其他部分。
高层绘图操作简单明了,方便高效,使用户最常使用的绘图方法,而低层绘图操作控制和表现图形的能力更强,为用户自主绘图创造了条件。
其实MATLAB的高层绘图函数都是利用低层绘图函数建立起来的。
所以MATLAB的计算准确、效率高、使用快捷等优点常被广泛应用于科学和工程领域.
[关键字]MATLAB语言三维图形绘制准确
一、问题的提出
MATLAB语言是当前国际学科界应用很广泛的一种软件,强大的绘图功能是MATLAB的特点之一。
MATLAB提供了一系列的绘图函数,利用它强大的图像处理来绘制三维图形既简单而且也很方便。
在绘制三维图形的过程中也用到了MATLAB语言的其他功能,绘制三维图形时用到了它提供的一些函数,利用这些函数可以方便的生成一些特殊矩阵,因此可生成一个坐标平面,三维图形的绘制也离不开绘制二维图形的一些函数,例如绘制三维图形的前视图和侧视图等的时候可以利用而为函数对其进行操作和处理,进而达到绘制三维图形的三视图的目的。
类似的问题也产后应用在软件开发类的编程中。
MATLAB语言强大的功能也在三维绘图中的得到了很广泛的应用,利用它所提供的精细的图像处理功能,如MATLAB还提供了直接对句柄进行操作的一系列的低层的绘图操作。
这类操作将图形的每个元素看做是一个独立的对象,系统给每个对象独立的分配一个句柄,以后可以通过该句柄对改图元素进行操作,而不影响图形的其他部分。
高层绘图操作简单明了,使用户最常使用的绘图方法,而低层绘图操作控制和表现图形的能力更强,为用户自主绘图创造了条件,还可以对所绘制的三维图形作一个修饰的处理,那么,如何把它强大的绘图功能的图像处理功能应用于实际应用中,下面我们将用实例说明。
二、两个同直径圆管相交问题
1、两个同直径圆管相交程序
m=30;%定义变量
theta=(0:
m)/m*2*pi;%取角度
z=1.2*(-m:
2:
m)/m;%设置竖直圆管的高度
r=ones(size(z));%生成同z大小的全一矩阵
z1=z'*ones(1,m+1);%生成第一个圆管的坐标矩阵
x1=r'*cos(theta);%生成第一个圆管的坐标矩阵
y1=r'*sin(theta);%生成第一个圆管的坐标矩阵
surf(x1,y1,z1);%绘制竖立的圆管
x=(-m:
2:
m)/m;%产生行矩阵
x2=x'*ones(1,m+1);%生成第一个圆管的坐标矩阵
y2=r'*cos(theta);%生成第一个圆管的坐标矩阵
z2=r'*sin(theta);%生成第一个圆管的坐标矩阵
surf(x2,y2,z2);%绘制平放的圆管
surf(x1,y1,z1);holdon;%竖立的圆管上添加平放的圆管
surf(x2,y2,z2);%绘制平放的圆管
axisequal,axisoff%去掉坐标轴
title('两个同直径圆管的相交');%添加标题
holdoff%关闭图形保持
运行结果如图1所示。
图1两个同直径圆管的相交图形
2、两个同直径圆管相交的前视图的程序
x1=[-1,-1,1,1,-1];%在x轴上取点
y1=[1.2,-1.2,-1.2,1.2,1.2];%在y轴上取点
x2=[-1,1];%在x轴上取点
y2=[1,-1];%在y轴上取点
x3=[1,-1];%在x轴上取点
y3=[1,-1];%在y轴上取点
plot(x1,y1);%把各点连起来设置外围线
holdon%设置图形保持状态
plot(x2,y2);%绘制两条相交直线中的一条
holdon%设置图形保持状态
plot(x3,y3);%绘制两条相交直线中的另一条
ax1=[0,1,1];%在x轴上取点
ay1=[0,-1,1];%在y轴上取点
ax2=[0,-1,-1];%在x轴上取点
ay2=[0,1,-1];%在y轴上取点
fill(ax1,ay1,'g');%填充颜色
holdon%设置图形保持状态
fill(ax2,ay2,'g')%添充颜色
axisequal,axisoff;%去掉坐标轴
title('两个同直径圆管相交的前视图');%给绘制的图形添加标题
运行结果如图2所示。
图2两个同直径圆管相交的前视图图形
3、两个同直径圆管相交的侧视图程序
r1=1;%定义变量
t=0:
pi/90:
2*pi;%取角度
xc=r1*cos(t);%水平圆柱
zc=r1*sin(t);%水平圆柱
fill(xc,zc,'y');%给水平圆柱填充颜色
holdon%设置图形保持状态
tx1=[1,1,-1,-1];%在x轴上取点
ty1=[0,1,1,0];%在y轴上取点
plot(tx1,ty1);%绘制竖立的圆管
holdon%设置图形保持状态
tx2=[1,1,-1,-1];%在x轴上取点
ty2=[0,-1,-1,0];%在y轴上取点
plot(tx2,ty2);%绘制图形
axisequal,axisoff;%去掉坐标轴
title('两个同直径圆管相交的侧视图');%添加标题
运行结果如图3所示。
图3两个同直径圆管相交的侧视图图形
三、两个不同直径圆管的相交的问题
1、两个不同直径圆管的相交程序
m=30;%定义变量
theta=(0:
m)/m*2*pi;%取角度
z=1.2*(-m:
2:
m)/m;%设置竖直圆管的高度
r=ones(size(z));%生成同z大小的全一矩阵
z1=z'*ones(1,m+1);%生成第一个圆管的坐标轴
x1=r'*cos(theta);%生成第一个圆管的坐标轴
y1=r'*sin(theta);%生成第一个圆管的坐标轴
surf(x1,y1,z1);%绘制竖立的圆管
x=(-m:
2:
m)/m;%产生行矩阵
x2=x'*ones(1,m+1);%生成第一个圆管的坐标轴
y2=r'*cos(theta);%生成第一个圆管的坐标轴
z2=r'*sin(theta);%生成第一个圆管的坐标轴
surf(x2,y2,z2);%绘制平放的圆管
surf(x1,y1,z1*3);%竖立的圆管高度变高
holdon%设置图形保持状态
surf(x2*2,y2*2,z2*2);%绘制平放的圆管
axisequal,axisoff%去掉坐标轴
title('两个不同直径圆管的相交');%添加标题
holdoff%关闭图形保持
运行结果如图4所示。
图4两个不同直径圆管的相交图形
2、两个不同直径圆管相交前视图程序
m=30;%定义变量
theta=(0:
m)/m*2*pi;%取角度
z=1.2*(-m:
2:
m)/m;%设置竖直圆管的高度
r=ones(size(z));%生成z大小的全一矩阵
z1=z'*ones(1,m+1);%生成第一个圆管的坐标轴
x1=r'*cos(theta);%生成第一个圆管的坐标轴
y1=r'*sin(theta);%生成第一个圆管的坐标轴
surf(x1,y1,z1);%绘制竖立的圆管
shadingflat;%颜色插值处理
holdon%设置图形保持状态
x=(-m:
2:
m)/m;%产生行距阵
x2=x'*ones(1,m+1);%生成第一个圆管的坐标轴
y2=r'*cos(theta);%生成第一个圆管的坐标轴
z2=r'*sin(theta);%生成第一个圆管的坐标轴
surf(x2,y2,z2);%绘制平放的圆管
shadingflat;%颜色插值处理
meshz(x1,y1,z1*3);%绘制出图形
shadingflat;%对竖直的方向进行颜色处理
view(0,0);%指定图的视点
holdon%设置图形保持状态
surf(x2*2,y2*2,z2*2);%绘制平方的圆管
axisequal,axisoff%去掉坐标轴
title('两个不同的圆管相交的前视图');%添加标题
holdoff%关闭图形保持
运行结果如图5所示。
图5两个不同直径圆管的相交前视图
3、两个不同直径圆管相交侧视图程序
ax=[1,-1,-1,1,1];%在x轴上取点
ay=[4,4,-3,-3,4];%在y轴上取点
plot(ax,ay);%绘制竖立的圆管的外围线
holdon%设置图形保持状态
r1=2;%定义变量
t=0:
pi/90:
2*pi;%取角度
xc=r1*cos(t);%水平圆柱
zc=r1*sin(t);%设置高度
fill(ax,ay,'y');%添加颜色
plot(xc,zc);%绘制水平圆柱侧视图
axisequal,axisoff%去掉坐标轴
title('两个不同直径圆管的相交侧视图');%添加标题
运行结果如图6所示。
图6两个不同直径圆管相交侧视图图形
四、一个圆柱和一个圆锥相交的问题
1、一个圆柱和一个圆锥相交程序
[x3,y3,z3]=cylinder([5,0]);%函数调用生成一个圆锥
[x4,y4,z4]=cylinder(3);%函数调用生成一个圆柱
surf(0.4*x4,0.4*y4,z4*6);%绘制竖立的圆柱
holdon;%设置图形保持状态
surf(x3*0.5,y3*0.5,z3*4+6);%绘制圆锥
axisequal,axisoff%去掉坐标轴
title('一个圆柱和一个圆锥相交');%添加标题
holdoff%关闭图形保持
运行结果如图7所示。
图7一个圆柱和一个圆锥相交图形
2、圆柱和圆锥相交前视图和侧视图程序
ax1=[0,-2.2,-1.2,-1.2,1.2,1.2,2.2,0];%在x轴上取点
ay1=[10,6,6,0,0,6,6,10];%在y轴上取点
plot(ax1,ay1);%绘制外围线
holdon%设置图形保持状态
ax2=[-2.2,2.2];%在x轴上取点
ay2=[6,6];%在y轴上取点
plot(ax2,ay2);%绘制上面三角形的一条边
holdon%设置图形保持状态
ax3=[0,-2.2,2.2,0];%在x轴上取点
ay3=[10,6,6,10];%在y轴上取点
plot(ax3,ay3);%绘制图形
fill(ax3,ay3,'r');%给上面的三角形填充颜
axisequal,axisoff%去掉坐标轴
title('圆柱和圆锥相交前视图和侧视图');%添加标题
运行结果如图8所示。
图8圆柱和圆锥相交前视图和侧视图图形
五、结论
从以上利用MATLAB语言对图形的绘制我们不难的出以下结论:
利用MATLAB语言强大的绘图功能可以精确的绘制出一系列的三维图像。
MATLAB提供了一系列的绘图函数,用户不仅不许考虑绘图细节,只需给出一些基本的参数就能得到所需要的图形,这一类函数称为高层绘图函数。
除此之外,MATLAB还提供了直接对句柄进行操作的一系列的低层的绘图操作。
这类操作将图形的每个元素看做是一个独立的对象,系统给每个对象独立的分配一个句柄,以后可以通过该句柄对改图元素进行操作,而不影响图形的其他部分。
高层绘图操作简单明了,方便高效,使用户最常使用的绘图方法,而低层绘图操作控制和表现图形的能力更强,为用户自主绘图创造了条件。
其实MATLAB的高层绘图函数都是利用低层绘图函数建立起来的。
在绘制此三维图形的过程中,用到了MATLAB的很多强大的功能。
二维图形是将平面上的数据点连接起来的平面图形,可以采用不同的坐标系,出直角坐标系外,还可以采用对数坐标、极坐标。
数据点可以用向量或矩阵的形式给出,类型可以是实行或复形,二维图形的绘制无疑是三维绘图的基础。
例如我此次的论文中就有对两个圆柱互相嵌套的前视图和侧视图的绘制,但利用三维绘图函数或者其他的函数我感觉对自己有困难的时候就利用二维函数来绘制,但其效果和结果一样能达到预期的效果,所以说MATLAB在绘制图形方面更进一步的体现出了它强大的绘图功能。
六、课程体会
经过这学期MATLAB语言的学习,我深深体会到MATLAB语言相对于同类程序语言更方便更简洁易懂,而且,它所具有的强大的功能可以使我们解决很多用其他计算机语言不容易解决的问题。
MATLAB提供了一系列的绘图函数,用户不仅不许考虑绘图细节,只需给出一些基本的参数就能得到所需要的图形,这一类函数称为高层绘图函数,这学期学习让我感受颇多,这门语言相对于其他计算机语言而言不仅简单易操作而且它还具备强大的功能,不管你做什么设计只要牵涉到编程,它总会提供一些函数给我们供我们应用。
例如物理中的力学问题可以用它来分析解决,线性代数中的矩阵可以用它来计算,高数中的傅里叶函数可以用它来分析计算等。
三维绘图利用它来绘制显得更方便准确。
所以,我应该进一步学习和掌握这门语言,把它很好的用到自己以后的学习中。
[参考文献]
[1]刘卫国.MATLAB程序设计与应用(第二版)[M].北京:
高等教育出版社,2006.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 MATLAB 语言 三维 图形 绘制