matlab小问题

来源:互联网 发布:c语言md5加密代码 编辑:程序博客网 时间:2024/06/07 10:06

最近使用matlab,看到一些小技巧,总结至此
一。isosurface
1.如xlabel(‘\fontname{times New Toman}\fontsize{40}你好’),可以更快捷、更方便的设置显示内容的属性,当然也可以直接在figure中设置
2.isosurface函数可以画隐函数的等值曲线或曲面 如画笛卡尔心形函数,其方程为(x^2 + (9/4)y^2 + z^2 - 1)^3 - x^2z^3 - (9/80)y^2z^3 = 0,可参考网址http://luo.bo/1924/ 由于是隐函数,不好用一般的方法画出其图形来,这就可以用isosurface来实现,
代码如下

figure [x,y,z]=meshgrid(linspace(-3,3)); %做出网格meshgrid p=(x.^2+(9/4)*y.^2+z.^2-1).^3-x.^2.*z.^3-(9/80)*y.^2.*z.^3; %实现结果的表达 isosurface(x,y,z,p,0,x); axis equal; axis off; view(0,45); %视角的控制 colormap([1 0 0]); %绘图颜色红色 brighten(0.5); %增亮 camlight right; %光源位置 lighting phong; %光照模式 

代码参考http://blog.sina.com.cn/s/blog_4b013fb10100llxh.html
另外这个函数还有一个好处是,可以得到等值面的顶点和面,然后可以直接调用patch画出来 fv = isosurface(x,y,z,p,0); patch(fv) 这一点很好,可以将得到的顶点和面保存到文件,用opengl画出来,可以更好的渲染图形,这点已经实现。
下面简单翻译一下help里的解释吧:
isosurface函数用于由体积数据中提取等值数据。
使用方法如下
fv = isosurface(X,Y,Z,V,isovalue)
fv = isosurface(V,isovalue)
fvc = isosurface(…,colors)
[f,v] = isosurface(…)
[f,v,c] = isosurface(…)
isosurface(…)
参数意义为,从由X,Y,Z构造的体积V数据中提取由isovalue指定的等值数据,返回结果fv为一个结构体,包含了等值面的顶点和面(顶点的次序),这些参数可以直接传给patch命令画出图形来。 另外,可以在最后加上colors,返回值中也会得到每个面的颜色插值,这样能够使你用不同于计算等值面的数据控制等值面的颜色映射。 如果不设置返回值,就会自动在当前坐标系里用计算得到的顶点和面创建三维patch对象。
二。view
MATLAB提供了设置视点的函数view。
其调用格式为: view(az,el) az是azimuth(方位角)的缩写,EL是elevation(仰角)的缩写。它们均以度为单位。系统缺省的视点定义为方位角-37.5°,仰角30°。
当x轴平行观察者身体,y轴垂直于观察者身体时,az=0; 以此点为起点,绕着z轴顺时针运动,az为正,逆时针为负。 EL 为观察者眼睛与xy平面形成的角度。 当观察者的眼睛在xy平面上时,el=0; 向上el为正,向下为负;
下面是一些例子:
AZ = -37.5, EL = 30 是默认的三维视角. AZ = 0, EL = 90 是2维视角,从图形正上方向下看,显示的是xy平面.
AZ = EL = 0 看到的是xz平面.
AZ = 180,EL=0 是从背面看到的xz平面.
VIEW(2) 设置默认的二维视角, AZ = 0, EL = 90.
VIEW(3) 设置默认的三维视角, AZ = -37.5, EL = 30.
VIEW([X Y Z]) 设置Cartesian坐标系的视角,[X Y Z]向量的长度大小被忽略. [AZ,EL] = VIEW 返回当前的方位角和仰角.
三。rotate
H指的是图形句柄,每创建一个图形都有一个不同的句柄值与其对应 你可以这样写,h=figure(1);
rotate(h,[30,60],-45),就可以对图形进行旋转,至于沿旋转90度,根据参数定义,配置三个角度值就可以了 rotate(h,[0 0 1],0.2) 1、h,这是画图函数返回的句柄,用于后续操作;
2、[0 0 1],用于指定旋转轴,分别对于x、y、z轴,1表示指定该轴为旋转轴;
3、0.2,旋转角度,按第2步指定的轴把h句柄指定图像旋转0.2度;
可以试试下面例子,感觉一下

t=(0:0.01:2)*pi; [x,y,z]=cylinder(1+cos(t).^2); subplot(2,2,1);h1=surf(x,y,z),colormap(Jet),axis square; zdir = [1 0 0]; subplot(2,2,2);h2=surf(x,y,z),rotate(h2,zdir,90) zdir = [1 0 0]; subplot(2,2,3);h3=surf(x,y,z),rotate(h3,zdir,45) 

四。meshgird
生成绘制3D图形所需的网格数据。在计算机中进行绘图操作时, 往往需要一些采样点,然后根据这些采样点来绘制出整个图形。在进行3D绘图操作时,涉及到x、y、z三组数据,而x、y这两组数据可以看做是在Oxy平面内对坐标进行采样得到的坐标对(x, y) 例如, 要在“3<=x<=5,6<=y<=9,z不限制区间” 这个区域内绘制一个3D图形,如果只需要整数坐标为采样点的话。我们可能需要下面这样一个坐标构成的矩阵:
(3,9),(4,9),(5,9);
(3,8),(4,8),(5,8);
(3,7),(4,7),(5,7);
(3,6),(4,6),(5,6);
在matlab中我们可以这样描述这个坐标矩阵: 把各个点的x坐标独立出来,得:
3,4,5;
3,4,5;
3,4,5;
3,4,5;
再把各个点的y坐标也独立出来:
9,9,9;
8,8,8;
7,7,7;
6,6,6;
这样对应的x、y结合,便表示了上面的坐标矩阵。meshgrid就是产生这样两个矩阵,来简化我们的操作。然后根据(x, y)计算获得z,并绘制出三维图形。

0 0