用polyshape函数创建几何模型

可以使用polyshape函数创建几何模型。该函数创建的多边形区域可以通过三角化生成网格,然后可以使用geometryFromMesh函数将几何模型指定给PDE模型。[大谦MATLAB,dqmatlab点com]

pgon = polyshape() 创建一个空的polyshape对象。

pgon = polyshape(x,y) 用x 坐标向量和对应的y坐标向量定义的一系列二维顶点创建polyshape对象。x和y的长度必须相同,且至少要有三个元素。

pgon = polyshape(P) 用N×2矩阵P中定义的二维顶点创建polyshape对象,其中N是顶点数。P 的第一列定义x坐标,第二列定义y坐标。

pgon = polyshape(X,Y) X和Y分别是x和y坐标的1×M向量元胞数组,用X和Y创建具有M个边界的多边形。X中的每个向量必须与Y中的对应向量具有相同的长度,但各个边界的顶点数可以互不相同。

pgon = polyshape(___,Name,Value) 为上述任意语法指定创建polyshape对象的其他参数。Name和Value匹配对的设置如表1-1所示。

表1-1 Name和Value匹配对的设置

Name Value 说 明
SolidBoundaryOrientation 'auto'(默认)| 'cw' | 'ccw' 边界的方向
Simplify true(默认)| false 顶点更改
KeepCollinearPoints false(默认)| true 共线顶点

各语法均返回一个polyshape对象,它有Vertices, NumRegions和NumHoles等3个属性。Verties属性为一两列矩阵,保存二维顶点的坐标。NumRegions属性表示多边形中的区域数。NumHoles属性表示多边形中的孔洞数。

【例11】下面用polyshape函数创建类似图3-3中所示的几何模型。

>> t = pi/12:pi/12:2*pi;

code.matlab
>> pg = polyshape({[-0.9638 0.8717 0.8717 -0.9638], 0.4424*cos(t)-0.0082}, ...
                {[0.5312 0.5312 -0.4589 -0.4589], 0.1859*sin(t)+0.0296})

返回polyshape对象的属性。

code.matlab
  polyshape - 属性:
      Vertices: [29×2 double]
    NumRegions: 1
      NumHoles: 1

绘制多边形区域的图形。

code.matlab
>> plot(pg)
>> axis equal

生成图4-7。

Document Image
\[\]

图4-7 用polyshape函数创建多边形区域

用triangulation函数对多边形区域进行三角网格化。

code.matlab
>> tr = triangulation(pg)

返回三角网对象的属性。

code.matlab
  triangulation - 属性:
              Points: [28×2 double]
    ConnectivityList: [28×3 double]

Points属性表示三角网的节点,每列数据表示各节点的横坐标和纵坐标。ConnectivityList属性表示每个三角形由哪3个节点构成,矩阵中每列数据按逆时针方向表示三角形顶点对应的节点编号。

绘制三角网。

code.matlab
>> triplot(tr)

生成图4-8。

Document Image
\[\]

图4-8 绘制多边形区域的三角网

利用三角网的Points属性和ConnectivityList属性值,使用geometryFromMesh函数可以创建PDE模型的几何对象。geometryFromMesh函数的语法格式为:

geometryFromMesh(model,nodes,elements) 根据网格节点和网格中各三角形顶点连接列表创建PDE模型的几何对象。

geometryFromMesh(model,nodes,elements,ElementIDToRegionID) 创建有多个子域的几何对象。这里ElementIDToRegionID为网格中的每个三角形指定所属的子域编号。

[G,mesh] = geometryFromMesh(model,nodes,elements) 返回表示几何对象的句柄G和表示网格对象的句柄mesh。

【例12】下面先创建一个PDE模型。

code.matlab
>> model = createpde;

获取三角网中的节点和三角网中各三角形顶点连接列表数据。

code.matlab
>> tns = tr.Points';
>> tes = tr.ConnectivityList';

使用geometryFromMesh函数创建PDE模型的几何对象。

code.matlab
>> geometryFromMesh(model,tns,tes);

绘制PDE模型的图形。

code.matlab
>> pdegplot(model,'EdgeLabels','on','FaceLabels','on')

生成图4-9。

Document Image
\[\]

图4-9 绘制PDE模型的图形