立方体中的球体
这个例子展示了如何创建由单位球体和立方体组成的嵌套多域几何图形。示例的第一部分通过使用创建一个具有球形腔的立方体alphaShape
.第二部分使用四面体元素创建一个实心球体,然后将所有的四面体元素组合在一起,得到一个嵌入立方体中的实心球体。
带球面腔的立方体
首先,创建一个由一个立方体和一个球腔组成的几何图形。这个几何图形只有一个单元格。
创建一个三维矩形网格。
[xg, yg, zg] = meshgrid(-2:0.25:2);Pcube = [xg(:) yg(:)), zg(:)];
提取位于单位球面区域外的格点。
Pcavitycube = Pcube(vecnorm(Pcube') > 1,:);
在单位球面上创建点。
[x1,y1,z1] =球面(24);Psphere = [x1(:) y1(:) z1(:)];Psphere =唯一的(Psphere,“行”);
组合矩形网格的坐标(不包括球体内的点)和单位球体的表面坐标。
Pcombined = [Pcavitycube;Psphere];
创建一个alphaShape
对象,表示具有球形空腔的立方体。
shpCubeWithSphericalCavity = alphaShape(Pcombined(:,1),...Pcombined (:, 2),...Pcombined (:, 3));图绘制(shpCubeWithSphericalCavity,“FaceAlpha”, 0.4)标题(alphaShape:带球形腔的立方体)
恢复定义域的三角测量alphaShape
对象。
[tri,loc] = alphangulation (shpCubeWithSphericalCavity);
创建PDE模型。
modelCube = createpde;
从网格创建一个几何图形,并将几何图形和网格导入模型。
[gCube,mshCube] = geometryFromMesh(modelCube,loc',tri');
绘制结果几何图形。
图pdegplot (modelCube,“FaceAlpha”, 0.5,“CellLabels”,“上”)标题(“PDEModel:带球形腔的立方体”)
立方体中嵌套的实心球体
创建四面体元素,通过使用球壳并在中心添加一个新节点来形成一个实心球体。首先,通过提取球边界的切面得到球壳。
sphereFacets =边界facet (mshCube,“脸”3);sphereNodes = findNodes(mshCube,“地区”,“脸”3);
在中心添加一个新节点。
newNodeID = size(mshCube.Nodes,2) + 1;
利用球面上的三个节点和原点上的新节点构造四面体单元。
sphereTets = [sphereFacets;newNodeID *的(1、大小(sphereFacets 2)));
创建一个结合立方体、球面腔和球体的模型。
模型= createpde;
创建一个映射所有的向量mshCube
元素归单元格1,实心球的所有元素归单元格2。
e2c = [ones(1,size(mshCube.Elements,2)), 2*ones(1,size(sphereTets,2))];
在中心添加一个新节点(0, 0, 0)
到有腔体的立方体节点。
combinedNodes = [mshCube.Nodes,[0;0;0]];
组合元素连通性矩阵。
combinedElements = [mshCube.Elements,sphereTets];
从网格创建一个双单元几何。
[g,msh] = geometryFromMesh(model,combinedNodes,combinedElements,e2c);图pdegplot(模型,“FaceAlpha”, 0.5,“CellLabels”,“上”)标题(“立方体中的实心球”)