Сфера в кубе

Этот пример показов, как создать вложенную многодоменную геометрию, состоящую из сферы единичного радиуса и куба. Первая часть примера создает кубик со сферической полостью при помощи 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);

Создайте модель УЧП.

modelCube = createpde;

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

[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];

Создайте геометрию двух ячеек из mesh.

[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.

Для просмотра документации необходимо авторизоваться на сайте