使用matlab画相交的平面

引子

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在数字图像处理及三维图形展示上的应用(分层设色) - 司徒鲜生 - 博客园

[5]. Matlab绘图-很详细,很全面 - Octal_H的博客 - CSDN博客

[6]. 用matlab作出抛物柱面y^2=x和平面x+z=1相交的图形具体步骤_百度知道

posted @ 2019-09-08 22:16  缘起花渊  阅读(3930)  评论(0编辑  收藏  举报