引子
matlab 作为科学计算神器,可以轻松的实现矩阵的计算和三维图形的绘制,
因此今天用matlab绘制了一道高数题中的图形。
题目如下:
其中 x+y = pi/2 已经证明是错题,应该是 x + z = pi/2。
分析
因此:
想要实现所围封闭区域的绘制,就是要实现:
1) y^2 = x
2) z = 0
3) y = 0
4) x = pi / 2 - z
以上四个平面的绘制。
编程
matlab编程 程序如下:
1 [x z] = meshgrid([0:0.1:pi]) 2 y = sqrt(x) 3 mesh(x,y,z,'FaceColor','r','EdgeColor','none') % 绘制曲面 y^2=x 4 x = pi/2 - z 5 hold on 6 mesh(x,y,z,'FaceColor','g','EdgeColor','none') % 绘制曲面 x+z=pi/2 7 xlabel('x');ylabel('y');zlabel('z');alpha(0.5) 8 z = ones(size(x))-1 9 mesh(x,y,z,'FaceColor','b','EdgeColor','none') % 绘制曲面 z=0 10 [x z] = meshgrid([0:0.1:pi]) 11 y = ones(size(x))-1 12 mesh(x,y,z,'FaceColor','y','EdgeColor','none') % 绘制曲面 y=0 13 alpha(0.5)
最终效果图
程序分析
核心程序分析:
1) meshgrid() 用于网格数,line 1 处用于生成 x 和 z 的范围。[0:0.1:pi] 代表生成x的定义域为(0,pi),每隔0.1作为一个分隔。
2) line 2 的函数 mesh(x,y,z,'FaceColor','r','EdgeColor','none') 表示生成曲面,x,y,z是未知量,FaceColor是面颜色,EdgeColor是边框颜色。
3) line 5 的 hold on , 表示 绘制的图形保持,不擦除,否则会擦除前面的图形。
4) line 8 的 z = ones(size(x))-1 代表 生成一个全是0的矩阵(单向量阵)。因为需要生成 z = 0 ; 而直接取0,会报错。错误示范如下:
>> [a b] = meshgrid([0:0.1:pi]) >> c = 0 >> mesh(a,b,c) Error using mesh (line 76) Z must be a matrix, not a scalar or vector 此处说明 Z 轴,作为一个无限量,不能为一个单一数,而应该是矩阵。
Z 轴必须是无限个量都为0,才是z=0平面,因此,需要用ones(N) 生成数量为N的,值都是1的有限矩阵,也即单位矩阵,然后生成的平面才是 轴平面。
而 ones(N)-1;生成的即是0矩阵。演示如下:
5) xlabel(str),ylabel(str),zlabel(str) 函数传入的字符串,作为轴标题(title),alpha(n)传入的是浮点数,作为透明百分比。
对上面图形稍加旋转,获得题图,证明确实题目条件有误。 应该是 x+z = pi/2
进行对比:
原题解答:
Todo
更近一步可以着手研究交叉线和交叉平面的表示方式,参照参考文献[6]。
但是参考文献6使用 contourslice 函数只是实现了轮廓线的画法,还不是最终的想法,后续再进行研究。
参考文献
[1]. 用matlab作出抛物柱面y^2=x和平面x+z=1相交的图形具体步骤_百度知道
[2]. matlab高手帮我看看怎么把几个相交的曲面弄透明,汇出交线~~~~~~~~~~~~~~~_百度知道
[3]. 创建三维绘图 - MATLAB & Simulink Example - MathWorks 中国
[4]. Matlab绘图基础——colormap在数字图像处理及三维图形展示上的应用(分层设色) - 司徒鲜生 - 博客园