ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

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) は、頂点に関するリスト vertices から、データ V の勾配を使用して、等値面頂点の法線を計算します。配列 XYZ は、3 次元物体 V に関する座標を定義します。計算される法線は、n に返されます。

n = isonormals(V,vertices) は、[X,Y,Z] = meshgrid(1:n,1:m,1:p) として定義される配列 XY およびZ を仮定していいます。ここで、[m,n,p] = size(V) です。

n = isonormals(V,p)n = isonormals(X,Y,Z,V,p) は、ハンドル p で識別されるパッチの頂点からの法線を計算します。

n = isonormals(...,'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');

物体データから等値面を描き、ライトを付加します。ここでは、三角形による法線計算を行っています。

figure
subplot(1,2,1)
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')

ボリューム データから計算される法線を使用して、同じライトを照射された等値面を描画します。

subplot(1,2,2)
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')

以下の図は、法線の算出の 2 つの方法の違いを示したものです。

R2006a より前に導入

この情報は役に立ちましたか?