주요 콘텐츠

alphaShape 기반의 지오메트리

MATLAB® alphaShape 함수를 사용하여 3차원 지오메트리를 만듭니다. 먼저, 원통형 구멍이 있는 블록을 나타내는 alphaShape 객체를 만듭니다. 그런 다음 alphaShape 경계에서 지오메트리를 만듭니다.

2차원 메시 그리드를 만듭니다.

[xg,yg] = meshgrid(-3:0.25:3);
xg = xg(:);
yg = yg(:);

단위 원판을 만듭니다. 단위 원판 내부에 있는 모든 메시 그리드 점을 제거하고 단위 원판의 점은 포함시킵니다.

t = (pi/24:pi/24:2*pi)';
x = cos(t);
y = sin(t);
circShp = alphaShape(x,y,2);
in = inShape(circShp,xg,yg);
xg = [xg(~in); cos(t)];
yg = [yg(~in); sin(t)];

나머지 메시 그리드 점의 3차원 복사본을 만듭니다. 이때 z 좌표의 범위는 0~1입니다. 그 점을 결합하여 alphaShape 객체를 만듭니다.

zg = ones(numel(xg),1);
xg = repmat(xg,5,1);
yg = repmat(yg,5,1);
zg = zg*(0:.25:1);
zg = zg(:);
shp = alphaShape(xg,yg,zg);

alphaShape 객체의 곡면 메시를 생성합니다.

[elements,nodes] = boundaryFacets(shp);

곡면 메시에서 fegeometry 객체를 만듭니다.

gm = fegeometry(nodes,elements)
gm = 
  fegeometry with properties:

       NumCells: 1
       NumFaces: 7
       NumEdges: 14
    NumVertices: 10
       Vertices: [10×3 double]
           Mesh: []

곡면 메시에서 만들어진 3차원 지오메트리의 경우 Mesh 속성이 빈 상태로 유지됩니다. 해석에 지오메트리를 사용하려면 메시를 만드십시오.

gm = generateMesh(gm);
gm.Mesh
ans = 
  FEMesh with properties:

             Nodes: [3×11247 double]
          Elements: [10×6880 double]
    MaxElementSize: 0.3418
    MinElementSize: 0.1709
     MeshGradation: 1.5000
    GeometricOrder: 'quadratic'

면 레이블을 포함하여 지오메트리를 플로팅합니다.

pdegplot(gm,FaceLabels="on",FaceAlpha=0.5);

Figure contains an axes object. The axes object contains 6 objects of type quiver, text, patch, line.

메시를 플로팅합니다.

pdemesh(gm);

Figure contains an axes object. The hidden axes object contains 5 objects of type quiver, text, patch.