可以使用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;
>> 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对象的属性。
polyshape - 属性:
Vertices: [29×2 double]
NumRegions: 1
NumHoles: 1
绘制多边形区域的图形。
>> plot(pg)
>> axis equal
生成图4-7。
图4-7 用polyshape函数创建多边形区域
用triangulation函数对多边形区域进行三角网格化。
>> tr = triangulation(pg)
返回三角网对象的属性。
triangulation - 属性:
Points: [28×2 double]
ConnectivityList: [28×3 double]
Points属性表示三角网的节点,每列数据表示各节点的横坐标和纵坐标。ConnectivityList属性表示每个三角形由哪3个节点构成,矩阵中每列数据按逆时针方向表示三角形顶点对应的节点编号。
绘制三角网。
>> triplot(tr)
生成图4-8。
图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模型。
>> model = createpde;
获取三角网中的节点和三角网中各三角形顶点连接列表数据。
>> tns = tr.Points';
>> tes = tr.ConnectivityList';
使用geometryFromMesh函数创建PDE模型的几何对象。
>> geometryFromMesh(model,tns,tes);
绘制PDE模型的图形。
>> pdegplot(model,'EdgeLabels','on','FaceLabels','on')
生成图4-9。
图4-9 绘制PDE模型的图形