exponenta event banner

Сфера в кубе

В этом примере показано, как создать вложенную многооменную геометрию, состоящую из единичной сферы и куба. Первая часть примера создает куб со сферической полостью с помощью alphaShape. Вторая часть создает сплошную сферу, используя тетраэдрические элементы, а затем объединяет все тетраэдрические элементы, чтобы получить сплошную сферу, внедренную в куб.

Куб со сферической полостью

Сначала создайте геометрию, состоящую из куба со сферической полостью. Эта геометрия имеет одну ячейку.

Создайте 3-D прямоугольную сетку.

[xg, yg, zg] = meshgrid(-2:0.25:2);
Pcube = [xg(:) yg(:), zg(:)];

Извлеките точки сетки, расположенные вне сферической области блока.

Pcavitycube = Pcube(vecnorm(Pcube') > 1,:);

Создайте точки на единичной сфере.

[x1,y1,z1] = sphere(24);
Psphere = [x1(:) y1(:) z1(:)];
Psphere = unique(Psphere,'rows');

Объедините координаты прямоугольной сетки (без точек внутри сферы) и координаты поверхности единичной сферы.

Pcombined = [Pcavitycube;Psphere];

Создание alphaShape объект, представляющий собой куб со сферической полостью.

shpCubeWithSphericalCavity = alphaShape(Pcombined(:,1), ...
                                        Pcombined(:,2), ...
                                        Pcombined(:,3));

figure
plot(shpCubeWithSphericalCavity,'FaceAlpha',0.4)
title('alphaShape: Cube with Spherical Cavity')

Figure contains an axes. The axes with title alphaShape: Cube with Spherical Cavity contains an object of type patch.

Восстановление триангуляции, определяющей домен alphaShape объект.

[tri,loc] = alphaTriangulation(shpCubeWithSphericalCavity);

Создайте модель PDE.

modelCube = createpde;

Создайте геометрию из сетки и импортируйте геометрию и сетку в модель.

[gCube,mshCube] = geometryFromMesh(modelCube,loc',tri');

Постройте график результирующей геометрии.

figure
pdegplot(modelCube,'FaceAlpha',0.5,'CellLabels','on')
title('PDEModel: Cube with Spherical Cavity')

Figure contains an axes. The axes with title PDEModel: Cube with Spherical Cavity contains 3 objects of type quiver, patch, line.

Сплошная сфера, вложенная в куб

Создайте четырехгранные элементы для формирования сплошной сферы с помощью сферической оболочки и добавления нового узла в центре. Во-первых, получить сферическую оболочку путем извлечения граней сферической границы.

sphereFacets = boundaryFacets(mshCube,'Face',3);
sphereNodes = findNodes(mshCube,'region','Face',3);

Добавьте новый узел в центре.

newNodeID = size(mshCube.Nodes,2) + 1;

Создайте тетраэдрические элементы, используя каждый из трех узлов на сферических граничных фасетах и новый узел в начале координат.

sphereTets =  [sphereFacets; newNodeID*ones(1,size(sphereFacets,2))];

Создайте модель, объединяющую куб со сферической полостью и сферой.

model = 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);
 
figure
pdegplot(model,'FaceAlpha',0.5,'CellLabels','on')
title('Solid Sphere in Cube')

Figure contains an axes. The axes with title Solid Sphere in Cube contains 3 objects of type quiver, patch, line.