平面和三维曲面图相交求交线和画图 |
您所在的位置:网站首页 › matlab三维图绘制mesh › 平面和三维曲面图相交求交线和画图 |
一、三维散点图画图 有的时候我们要画一些三维图(曲面图),但图的方程没有,只有一些散点图,想要画这样的图mesh和surf是暂时不行的 他们要求输入的是矩阵,但我们获得是 x y z这样的一些散点的结合,这时候画图只能用plot3 比如我们这些数据和图: 不好意思,具体描述什么物理量暂时不清楚,据说是一个亚/超高斯曲面 现在有个需求,就是要从过 原点 和 过最大值(记为x0,y0,z0) 拉一个平面,对这个三维图进行切割,画出切割出出来的平面和曲面的交线,下面最大值,貌似在12 -90.5 二、Matlab中画透明平面 平面是有三个点决定的(不重叠的三个点),我这里有z轴和一个最大值点,也能确定一个平面(用来做剖面) 我们设定这个剖面的宽和高 分别为w和h % 设界面高度为h,宽度为w,(根据具体情况定,按理说这个面是无穷大) w = 300; h = 120; seta = atan2(y0,x0);%使用 atan2函数获得 剖面和xy平面投影交线与x轴的夹角 x1 = x0 - (w/2)* cos(seta);%分别获得这个交线的开始点 y1 = y0 - (w/2)* sin(seta); x2 = x0 + (w/2)* cos(seta);%终止点 y2 = y0 + (w/2)* sin(seta); % 剖截面 % 左下 x1,y1,0 % 右下 x2,y2,0 % 右上 x2,y2,h % 左上 x1,y1,h 使用shape函数来画这个坡面,另外设定一定的透明度 patch([x1,x2,x2,x1],[y1,y2,y2,y1],[0,0,h,h],'w','FaceAlpha',0.4,'FaceColor','m'); 有点样子了,可以适当调整 宽高比,达到16:9的黄金视觉 上面隐约能看到交叠线,但这是matlab画图造成的,并不是我们get到 所谓的get到是,数学上所谓的有某个解析解(方程)或者数值解(一系列数值点),现在没有,只是看到。 三、获得交线 交线实际上是要解方程的,原则上是,满足既在平面上,又在曲面上,然后联立成方程组,然后解方程得到若干个点,连成线。 但现在没方程,尤其是三维曲面,点都是散点,没方程,说不定还得等待拟合呢,所以行不通。 行不通也不能代表不能画,方法就是使用插值 插值的思路就是对 曲面进行二维插值,插值的网格点你选择在剖截面上就行了(满足平面方程) 首先我们有这个函数 TriScatteredInterp 这个函数后续可能不支持了 这个函数就是用散点进行插值,完了返回插值方程F ,你再使用 F对grid 上的待插值点求算即可 %插值函数 F = TriScatteredInterp(x,y,z,'linear'); N1 = 500;%保证数量,太少插值效果不好 dx = (Rxmax - Rxmin)/(N1-1); grid_x = Rxmin:dx:Rxmax; %网格上的xy点都符合剖截面方程 %构造这样的grid很重要,否则下面的 “解方程”没有根 %高能---->三维曲面只在固定的grid有数值,不是每个地方都能刚好交叉上 Rymin)&&(yp < Rymax) intersecting_line = [intersecting_line;[xp,yp,zp]] ; end end end end % 拿出交线来 x_t = intersecting_line(:,1); y_t = intersecting_line(:,2); z_t = intersecting_line(:,3); figure(1) hold on plot3(x_t,y_t,z_t,'r','linewidth',5); (上图x轴坐标轴是相对值) 结果还不错 三、插值之后再使用mesh或者surf画图 现在插值结果也有了,我们可以使用mesh或者surf画图了 mesh(x_interp,y_interp,z_interp); 配合上面提到的 patch和plot3,立马得到最终的结果 总结一下: 画空间直线图 plot3 画曲面 mesh,surf 2D3D插值,TriScatteredInterp 有个疑问留给大家,上面二维插值的时候,能不能用interp2做插值?为什么? |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |