Main Content

isonormals

등가곡면 꼭짓점의 법선 계산

구문

n = isonormals(X,Y,Z,V,vertices)
n = isonormals(V,vertices)
n = isonormals(V,p)
n = isonormals(X,Y,Z,V,p)
n = isonormals(...,'negate')
isonormals(V,p)
isonormals(X,Y,Z,V,p)

설명

n = isonormals(X,Y,Z,V,vertices)는 데이터 V의 기울기를 사용하여 꼭짓점 목록에 있는 등가곡면 꼭짓점 vertices의 법선을 계산합니다. 배열 X, Y, Z는 볼륨 V에 대한 좌표를 정의합니다. 계산된 법선은 n으로 반환됩니다.

n = isonormals(V,vertices)는 배열 X, Y, Z[X,Y,Z] = meshgrid(1:n,1:m,1:p)로 정의되는 것으로 가정합니다. 여기서 [m,n,p] = size(V)입니다.

n = isonormals(V,p)n = isonormals(X,Y,Z,V,p)는 핸들 p로 식별되는 패치의 꼭짓점에서 법선을 계산합니다.

n = isonormals(...,'negate')는 법선을 부정(Negate)합니다. 즉, 법선의 방향을 반전시킵니다.

isonormals(V,p)isonormals(X,Y,Z,V,p)는 값을 반환하는 대신 핸들 p로 식별되는 패치의 VertexNormals 속성을 계산된 법선으로 설정합니다.

예제

모두 축소

서로 다른 곡면 법선이 조명을 받은 등가곡면의 시각적 모양에 미치는 영향을 비교합니다. 어떤 경우에는 등가곡면을 그리는 데 사용된 삼각형들이 법선을 정의합니다. 또 다른 경우에는 isonormals 함수가 볼륨 데이터를 사용하여 데이터 점의 기울기에 따라 꼭짓점 법선을 계산합니다. 두 번째 방법에서는 일반적으로 더 매끄러운 모양의 등가곡면이 만들어집니다.

볼륨 데이터의 3차원 배열을 정의합니다.

data = cat(3,[0 .2 0; 0 .3 0; 0 0 0],...
    [.1 .2 0; 0 1 0; .2 .7 0],...
    [0 .4 .2; .2 .4 0;.1 .1 0]);
data = interp3(data,3,'cubic');

볼륨 데이터에서 등가곡면을 그리고 조명을 추가합니다. 이 등가곡면은 삼각형 법선을 사용합니다.

tiledlayout(1,2)
nexttile
fv = isosurface(data,.5);
p1 = patch(fv,'FaceColor','red','EdgeColor','none');
view(3)
daspect([1,1,1])
axis tight
camlight
camlight(-80,-10)
lighting gouraud
title('Triangle Normals')

Figure contains an axes object. The axes object with title Triangle Normals contains an object of type patch.

볼륨 데이터에서 계산된 법선을 사용하여 동일하게 조명이 비추는 등가곡면을 그립니다.

nexttile
fv = isosurface(data,.5);
p2 = patch(fv,'FaceColor','red','EdgeColor','none');
isonormals(data,p2)
view(3) 
daspect([1 1 1])
axis tight
camlight 
camlight(-80,-10) 
lighting gouraud
title('Data Normals')

Figure contains 2 axes objects. Axes object 1 with title Triangle Normals contains an object of type patch. Axes object 2 with title Data Normals contains an object of type patch.

이러한 등가곡면은 삼각형 법선과 데이터 법선 사이의 차이점을 보여줍니다.

확장 기능

버전 내역

R2006a 이전에 개발됨