matlab refinemesh 官方介绍
语法
[p1,e1,t1] = refinemesh(g,p,e,t)
[p1,e1,t1] = refinemesh(g,p,e,t,‘regular’)
[p1,e1,t1] = refinemesh(g,p,e,t,‘longest’)
[p1,e1,t1] = refinemesh(g,p,e,t,it)
[p1,e1,t1] = refinemesh(g,p,e,t,it,‘regular’)
[p1,e1,t1] = refinemesh(g,p,e,t,it,‘longest’)
[p1,e1,t1,u1] = refinemesh(g,p,e,t,u)
[p1,e1,t1,u1] = refinemesh(g,p,e,t,u,‘regular’)
[p1,e1,t1,u1] = refinemesh(g,p,e,t,u,‘longest’)
[p1,e1,t1,u1] = refinemesh(g,p,e,t,u,it)
[p1,e1,t1,u1] = refinemesh(g,p,e,t,u,it,‘regular’)
[p1,e1,t1,u1] = refinemesh(g,p,e,t,u,it,‘longest’)
介绍
1.[p1,e1,t1] = refinemesh(g,p,e,t) 得到更加细化的三角形网格(specified by the geometry g, Point matrix p, Edge matrix e, and Triangle matrix t)
2.[p1,e1,t1,u1] = refinemesh(g,p,e,t,u) 细化网格并且 通过线性插值将函数u扩展到新网格。u中的行数应该对应于p中的列数,u1的行数与p1中的点数相同。u的每一列都被单独插值。
3.额外输入的参数(an extra input argument )it 如果是行向量,则将额外的输入参数解释为要细化的子域列表(a list of subdomains to refine); 如果是列向量,则将其解释为要细化的三角形列表(a list of triangles to refine)。
4.默认的细化方法是regular细化,其中所有指定的三角形被划分为四个形状相同的三角形。最长边(longest)细化,即每个指定三角形的最长边被平分,可以通过给出最长边作为最终参数来要求。
使用regular作为最后一个参数会导致常规细分。还可以对指定集合外的一些三角形进行细化,以保持三角化及其质量。
例子
细化L型的网格,并plot出结果
代码如下:
[p,e,t] = initmesh('lshapeg','hmax',inf);
subplot(2,2,1), pdemesh(p,e,t)
[p,e,t] = refinemesh('lshapeg',p,e,t);
subplot(2,2,2), pdemesh(p,e,t)
[p,e,t] = refinemesh('lshapeg',p,e,t);
subplot(2,2,3), pdemesh(p,e,t)
[p,e,t] = refinemesh('lshapeg',p,e,t);
subplot(2,2,4), pdemesh(p,e,t)
补充
该算法的描述步骤如下:
1.选择要细化的初始三角形集。
2.将选定三角形的所有边对半划分(regular refinement),或者将最长边对半划分(longest refinement)。
3.对任何有分割线的三角形的最长边进行分割线。
4.重复步骤3,直到没有进一步的边被分割。
5.引入所有划分边的新点,并将e中的所有划分项替换为两个新项。
6.形成新的三角形。如果这三条边都被分割,新的三角形将通过边的中点连接起来而形成。如果两边被分割,最长边的中点与对边的角和另一个中点相连。如果只分割最长边,则其中点与对边的角相交。