切换到宽版
  • 3531阅读
  • 0回复

[基础储备][计算机] 使用matlab函数构建三维立方体的几种方法 [转] [复制链接]

上一主题 下一主题
离线pjyang
 
发帖
418
财富
689
威望
43
交易币
0
只看楼主 倒序阅读 使用道具 0楼 发表于: 2009-01-22 | 石油求职招聘就上: 阿果石油英才网
    matlab是一种功能强大的科学运算软件,其基于矩阵的运算单位和和演算纸式的编程方式,配合强大的各类工具箱函数,极大简化了编程难度而又不失应用的灵活性,使matlab非常适合进行探索性的研究工作。matlab提供了丰富的绘图函数,能够快速高效地画出各类图形,在通用编程软件中功能领先。在matlab中,我们可以使用多种思路实现三维形体的构建,本文以构建一个三维立方体为例详细介绍matlab的用法,充分说明matlab的编程特点与构想方法,以供参考。

1、 三维形体的点阵表示方法。
   一个三维形体可以看成由无数个散点有规律集合而成。利用scatte3r()三维散点绘图函数绘制足够多的点,就可以实现三维空间的形体表示。如图1. 使用三重循环,用1000点实现一个10*10*10的立方体。此功能也可用plot3()实现.

for i=0:10;

   for j=0:10;

       for k=0:10;

   scatter3(i,j,k); hold on;

       end

    end

end

使用点阵描绘三维形体适合于比较简单有规律的目标,如果点数过多速度将较慢,一般较少应用。但是在由已知模型向未知模型转化的情况下,该方法十分有效。可以直接利用点对点的对应关系作出未知三维形体的空间结构。

2. 三维形体的线阵表示方法
   三维形体可以看成由多个截面集合而成,而面可以由线集合。本例中使用plot3绘制线段,组合成面,循环绘制多个面,就可以实现三维空间的形体表示。如图2. 使用三重循环,用100个面,每个面100条线,组成了一个立方体。

x=linspace(0,1);

y=linspace(0,1);

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

for i=1:100

Z=linspace(i,i);

plot3(X,Y,Z);hold on

end
此法作出立方体三维效果好,速度较快,接近实体。如果机器速度合适,可以看出立方体绘制时从下往上的动态效果。


3、三维形体的外围面表示
   直接绘制一个形体的所以外围面,也可以直接地表达该形体的立体效果。如图3,用不同颜色直接画出立方体的6个面,也可以得到逼真的三维效果。

x=linspace(0,1);

y=linspace(0,1);

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

for i=0:1:1

Z=linspace(i,i);

plot3(X,Y,Z,'r');hold on;

plot3(Y,Z,X,'g');hold on;

plot3(Z,X,Y,'b');hold on;

end

对形体的内部各点没有取值要求的情况下,直接绘面效率很高。

4、使用边缘线表示三维形体。
  这是一种常见的方法,利用透视关系,得到的图形也具有很好的效果。而且绘制速度最快。

X=zeros(8,3);

X([5:8,11,12,15,16,18,20,22,24])=1;

d=[1 2 4 3 1 5 6 8 7 5 6 2 4 8 7 3];

plot3(X(d,1),X(d,2),X(d,3));

view(3); rotate3d;

5、fill3函数作面

x=[0 1 1 0 0 0;1 1 0 0 1 1;1 1 0 0 1 1;0 1 1 0 0 0];

y=[0 0 1 0 0 0;0 1 1 1 0 0;0 1 1 1 1 1;0 0 1 0 1 1];

z=[0 0 0 0 0 1;0 0 0 0 0 1;1 1 1 1 0 1;1 1 1 1 0 1];

fill3(x,y,z, 'y')
fill3作出的多边形面,平滑完整,速度快,但对于带曲面的形体不适用。而且对于复杂的多面体,要一一找出顶点坐标也非易事。

6、patch函数作多面体

v=[0 0 0;0 50 0;30 50 0;30 0 0;0 0 40;0 50 40;30 50 40;30 0 40];
f= [1 2 3 4;2 6 7 3;4 3 7 8;1 5 8 4;1 2 6 5;5 6 7 8];
patch('Faces',f,'Vertices',v,'FaceColor','b');
view(30,30)
axis equal

7、mesh,surf函数作面

x=linspace(0,1);

y=linspace(0,1);

Z1=ones(100,100);

Z2=zeros(100,100);

mesh(X,Y,Z1);hold on;

mesh (X,Y,Z2);hold on;

mesh (Y,Z1,X);hold on;

mesh (Y,Z2,X);hold on;

mesh (Z1,Y,X);hold on;

mesh (Z2,Y,X);

mesh网线图:线条有颜色,空挡是无色的,surf曲面图:线条是黑色的,空挡有颜色
1条评分
坐看云起 财富 +10 版块管理 2009-01-22
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
http://www.agoil.cn/bbs/thread.php?fid-348.html

网站事务咨询:QQ:1392013 | 26189883
阿果石油网为免费个人网站,为石油人提供免费的在线即时技术交流场所,拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论和行为!
如有言论或会员共享的资料涉及到您的权益,请立即通知网站管理员,本站将在第一时间给予配合处理,谢谢!