Main Content

isosurface

볼륨 데이터에서 등가곡면 데이터 추출

설명

등가곡면은 3차원 데이터 분포와 동일한 값으로 이루어진 점들을 3차원 곡면으로 표현한 것입니다. isosurface 함수는 공간 볼륨 내의 상수 값의 점들을 연결하여 곡면을 계산하고 그립니다.

등가곡면 플로팅

예제

isosurface(X,Y,Z,V,isovalue)는 볼륨 데이터 V가 지정된 isovalue와 동일한 지점을 확인하고, isosurface를 현재 좌표축에 플로팅합니다.

등가곡면 데이터를 구조체로 계산

예제

s = isosurface(X,Y,Z,V,isovalue)는 볼륨 데이터 V가 지정된 isovalue와 동일한 지점을 확인하고, 결과 곡면의 면과 꼭짓점을 구조체로 반환합니다.

s = isosurface(X,Y,Z,V)는 데이터의 히스토그램을 사용하여 등가값을 선택합니다.

s = isosurface(V,isovalue)V의 크기를 기준으로 X, Y, Z 좌표를 사용합니다. 각 차원의 좌표는 1에서 시작하고 m×n×p 그리드를 형성합니다. 여기서 [m,n,p] = size(V)입니다.

s = isosurface(V)는 데이터의 히스토그램을 사용하여 등가값을 선택합니다.

s = isosurface(___,colors)는 배열 색을 스칼라장으로 보간하고 그 데이터를 구조체의 facevertexcdata 필드에 저장합니다.

s = isosurface(___,'verbose')는 계산이 진행됨에 따라 진행 메시지를 명령 창에 출력합니다.

s = isosurface(___,'noshare')는 공유하는 꼭짓점을 만들지 않습니다. 이 구문은 더 빠르게 실행되지만 결과로 생성되는 꼭짓점의 목록이 상당히 길어질 수 있습니다. 이 다음에 꼭짓점을 처리하거나 플로팅하는 연산을 수행하면 속도가 더 느릴 수 있습니다.

등가곡면 데이터를 배열로 계산하기

[faces,verts] = isosurface(___)는 면과 꼭짓점을 개별 배열로 반환합니다.

예제

[faces,verts,colors] = isosurface(___)는 면, 꼭짓점, 색 데이터를 개별 배열로 반환합니다.

예제

모두 축소

meshgrid를 사용하여 3차원 그리드 좌표를 만들고 볼륨 데이터 V를 만듭니다. 그런 다음 값 .0001에서 점을 연결하여 볼륨 내에 등가곡면을 만듭니다. 등가곡면을 플로팅합니다.

[x,y,z] = meshgrid([-3:0.25:3]); 
V = x.*exp(-x.^2 -y.^2 -z.^2);
isosurface(x,y,z,V,1e-4);

Figure contains an axes object. The axes object contains an object of type patch.

등가값이 0.0001인 등가곡면을 만듭니다. 결과 곡면의 면과 꼭짓점의 위치를 구조체로 반환합니다.

[x,y,z] = meshgrid([-3:0.25:3]); 
V = x.*exp(-x.^2 -y.^2 -z.^2);
s = isosurface(x,y,z,V,1e-4)
s = struct with fields:
    vertices: [1693x3 double]
       faces: [3348x3 double]

등가값이 .0001인 등가곡면을 만듭니다. 결과 곡면의 면과 꼭짓점의 위치를 개별 배열로 반환합니다.

[x,y,z] = meshgrid([-3:0.25:3]); 
V = x.*exp(-x.^2 -y.^2 -z.^2);
[faces,verts] = isosurface(x,y,z,V,1e-4)
faces = 3348×3

     1     2     3
     1     4     2
     2     4     5
     4     6     5
     5     6     7
     6     8     7
     9    10    11
     9    12    10
    10    12    13
    12    14    13
      ⋮

verts = 1693×3

    0.2500   -0.2500   -2.7918
    0.2181   -0.2500   -2.7500
    0.2500   -0.4366   -2.7500
    0.2500         0   -2.8092
    0.2049         0   -2.7500
    0.2500    0.2500   -2.7918
    0.2181    0.2500   -2.7500
    0.2500    0.4366   -2.7500
    0.5000   -0.7500   -2.7935
    0.4165   -0.7500   -2.7500
      ⋮

등가값이 0.0001인 등가곡면을 만듭니다. 면과 꼭짓점의 위치를 구조체로 계산합니다. 그런 다음, 구조체 데이터를 patch 함수에 전달하여 면과 꼭짓점 데이터를 플로팅합니다. 플롯의 보기를 조정하고 곡면 색을 변경하고 사용자 지정 조명을 지정합니다.

[x,y,z] = meshgrid([-3:0.25:3]); 
V = x.*exp(-x.^2 -y.^2 -z.^2);
s = isosurface(x,y,z,V,1e-4);
p = patch(s);
isonormals(x,y,z,V,p)
view(3);
set(p,'FaceColor',[0.5 1 0.5]);  
set(p,'EdgeColor','none');
camlight;
lighting gouraud;

Figure contains an axes object. The axes object contains an object of type patch.

흐름 데이터를 시각화하되, 곡면을 색상별 구분 처리하여 x축 상의 크기를 나타냅니다. 먼저, 등가곡면의 각 꼭짓점에 대한 스칼라 값을 포함하는 벡터를 지정하여 색 데이터를 계산합니다. 색은 현재 컬러맵으로 매핑됩니다.

[x,y,z] = meshgrid([-3:0.25:3]); 
V = x.*exp(-x.^2 -y.^2 -z.^2);
[faces,verts,colors] = isosurface(x,y,z,V,1e-4,x);

그런 다음, 데이터를 patch 함수로 전달하여 계산된 색 데이터로 등가곡면을 플로팅합니다. 카메라 각과 종횡비를 설정하고 컬러맵을 변경합니다.

patch('Vertices',verts,'Faces',faces,'FaceVertexCData',colors,...
    'FaceColor','interp','EdgeColor','interp')
view(3) 
colormap copper

Figure contains an axes object. The axes object contains an object of type patch.

입력 인수

모두 축소

x축 좌표 데이터로, V와 같은 크기의 벡터 또는 3차원 배열로 지정됩니다. 3차원 배열을 지정하는 경우, 이 배열은 meshgrid 함수로 생성된 것처럼 단조적이고 직교 관계에 있어야 합니다.

데이터형: single | double

y축 좌표 데이터로, V와 같은 크기의 벡터 또는 3차원 배열로 지정됩니다. 3차원 배열을 지정하는 경우, 이 배열은 meshgrid 함수로 생성된 것처럼 단조적이고 직교 관계에 있어야 합니다.

데이터형: single | double

z축 좌표 데이터로, V와 같은 크기의 벡터 또는 3차원 배열로 지정됩니다. 3차원 배열을 지정하는 경우, 이 배열은 meshgrid 함수로 생성된 것처럼 단조적이고 직교 관계에 있어야 합니다.

데이터형: single | double

볼륨 데이터로, X, Y, Z와 같은 크기의 3차원 배열로 지정됩니다.

데이터형: single | double

곡면을 계산하는 지점에서의 등가값으로, 스칼라로 지정됩니다.

데이터형: single | double

색 데이터로, V와 같은 크기의 벡터 또는 3차원 배열로 지정됩니다. 이 인수를 사용하여 isosurface 계산에 사용된 것과 다른 데이터를 사용하도록 하여 isosurface의 색 매핑을 제어할 수 있습니다. 이 인수는 결과 isosurface를 채색하여 다른 데이터 세트로 겹쳐 놓습니다. 벡터 또는 배열은 isosurface의 각 꼭짓점에 대한 스칼라 값을 포함하고 현재 컬러맵을 사용하여 매핑됩니다.

colormap 함수를 사용하여 색 체계를 사용자 지정할 수 있습니다. 이러한 사용자 지정을 수행하려면 곡면과 컬러맵 사이의 관계를 제어하는 배열의 값을 변경해야 합니다. 인덱스 배열은 플롯의 특정 위치와 컬러맵의 색을 연결합니다. 기본적으로, C의 중간값은 컬러맵의 중간 행에 선형적으로 매핑됩니다.

데이터형: single | double

출력 인수

모두 축소

등가곡면 데이터로, 대응되는 면과 꼭짓점 데이터를 포함하는 필드 facesvertices를 가진 구조체로 반환됩니다.

데이터형: single | double

계산된 등가곡면의 면 데이터로, 배열로 반환됩니다.

데이터형: single | double

계산된 등가곡면의 꼭짓점 데이터로, 배열로 반환됩니다.

데이터형: single | double

계산된 등가곡면의 색 데이터로, 각 꼭짓점의 보간된 색 데이터에 대한 스칼라 값을 포함하는 배열로 반환되며 현재 컬러맵을 사용하여 표현됩니다. colors 배열의 크기는 V와 동일해야 합니다.

데이터형: single | double

  • 사용자 지정 카메라 시각, 조명 또는 곡면의 다른 컬러맵을 지정하려면 patch 함수를 사용하여 isosurface에서 반환되는 데이터를 플로팅합니다. isosurface로 생성된 구조체를 patch 명령에 직접 전달할 수 있습니다. 예를 들어, 다음과 같이 합니다.

    s = isosurface(X,Y,Z,V,isovalue);
    patch(s)
  • 또는, 속성 이름을 지정하여 개별 면과 꼭짓점 배열을 patch에 전달할 수 있습니다. 예를 들어, 다음과 같이 합니다.

    [faces,verts] = isosurface(X,Y,Z,V,isovalue) ;
    patch('Faces',faces,'Vertices',verts);

확장 기능

버전 내역

R2006a 이전에 개발됨