正文

[笔记]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库玩玩吧。

阅读(13186) | 评论(2)


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

评论

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