正文

[笔记]MATLAB画图2007-06-29 20:33:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/rickone/27201.html

分享到:

一点感想,MATLAB用起来方便,关键还是要理解它的实质。

从图形学的角度,计算机画图,无非是画点,画线和画面,OpenGL就是基于点的图形库,它没有提供体的图元,构成体的实际上是体上的各个面,而面是由一些点和一种片型表达的,比如三角形片。

在MATLAB里,也可以这样类比,而且还要简化一些。只有两种,一是画线,一是画网格,也就是四边形片,即使这样表达一些复杂的几何形体也是很强大的。

1,画线

看成是画一维的形体。一维是指表现能力,比如画三维的线,同样还是画线。

比如我要画n维的线,就给出n个向量:

v1,v2,...vn

for i=1:m

{v1(i),v2(i),...vn(i)}就是这个线上一个离散化的点,前后用直线连起来就行了

在MATLAB里有plot和plot3,是同样的方法。

2,画网格

从直观上理解,一个面当然应该是3D的,它用一个离散的网格表示,网格里相邻的四个点构成一个四边形片,整个铺开就是曲面。

这时要给出3个矩阵:

xx,yy,zz

xx(i),yy(i),zz(i)就是网格上一个点的三维表示。

这里常用一个函数,meshgrid,就是生成两个网格的标准xx和yy分量。

比如:

>> x=[1 2 3 4]

x =

     1     2     3     4

>> y=[1 2]

y =

     1     2

>> [xx,yy]=meshgrid(x,y)

xx =

     1     2     3     4
     1     2     3     4


yy =

     1     1     1     1
     2     2     2     2

xx里一列是相等的,因为竖着方向上变,x值不变,同理yy里一行是相等的。再用它们构成同样size的zz,再用mesh(xx,yy,zz)就可以画出标准的曲面图了,一般这样的曲面只能是有z=z(x,y)的显式表达的方程,即一个曲顶梯形,但是这不能说mesh不能画其它复杂些的图形,比如球,它的曲面是相互包围的,只是那个时候就不能用meshgrid了,要想办法生成网格。

亲手画一个peaks曲面吧,和在MATLAB里键入peaks画出来的同样效果:

>>  x=linspace(-3,3,40);
[xx,yy]=meshgrid(x,x);
zz=3*(1-xx).^2.*exp(-(xx.^2) - (yy+1).^2) ...
   - 10*(xx/5 - xx.^3 - yy.^5).*exp(-xx.^2-yy.^2) ...
   - 1/3*exp(-(xx+1).^2 - yy.^2);
surf(xx,yy,zz)

PS:[xx,yy]=meshgrid(x,x)这样的用法真爽,要是C++里可以这么用就好了,有时间写一个C++下的Matrix库玩玩吧。

阅读(13025) | 评论(2)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册