Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

surfl

カラーマップ ベースのライティングによる表面のプロット

説明

surfl(X,Y,Z) は、光源によるハイライト部をもつ 3 次元表面プロットを作成します。この関数は行列 Z の値を、XY で定義される x-y 平面のグリッドの上の高さとしてプロットします。この関数は、光源に既定の方向、シェーディング モデルに既定のライティング係数を使用します。これにより、表面のカラー データが表面の反射に設定されます。

面法線ベクトルを計算する方法により、surfl には少なくとも 3 行 3 列の行列が必要です。

surfl(Z) は、表面を作成し、Z の要素の列インデックスと行インデックスを x 座標および y 座標として使用します。

surfl(___,'light') は、MATLAB® の light オブジェクトによるハイライト部をもつ表面を作成します。これは、既定のカラーマップベースのライティング手法とは異なる結果を生成します。'light' オブジェクトを最後の入力引数として指定します。

surfl(___,s) は、光源の方向も指定します。

surfl(X,Y,Z,s,k) は、さらに反射定数も指定します。

surfl(ax,___) は、現在の座標軸ではなく、ax で指定される座標軸にプロットします。座標軸を最初の入力引数として指定します。

s = surfl(___) は chart surface オブジェクトを返します。'light' オプションを使用して光源が light オブジェクトとして指定されている場合、s は、chart surface オブジェクトと light オブジェクトを含むグラフィックス配列として返されます。surface オブジェクトおよび light オブジェクトを作成した後で変更を加えるには、s を使用します。プロパティの一覧については、Surface のプロパティ および Light のプロパティ を参照してください。

すべて折りたたむ

同じサイズの 3 つの行列を作成します。次に、カラーマップベースのライティングを使用して、これらを表面としてプロットします。表面では、高さに Z、色に Z と光源の両方が使用されます。

[X,Y] = meshgrid(1:0.5:10,1:20);
Z = sin(X) + cos(Y);
surfl(X,Y,Z)

同じサイズの 3 つの行列を作成します。次に、それらを MATLAB® の light オブジェクトによるハイライト部をもつ表面としてプロットします。表面では、高さに Z、色に Z と light オブジェクトの両方が使用されます。関数は、surface オブジェクトと light オブジェクトを含む配列を返します。それを変数 sl に代入します。

[X,Y] = meshgrid(1:0.5:10,1:20);
Z = sin(X) + cos(Y);
sl = surfl(X,Y,Z,'light');

surface オブジェクトと light オブジェクトの作成後にそれらのプロパティにアクセスして変更するには、sl にインデックスを付けます。表面プロットは sl(1) として、light オブジェクトは sl(2) としてアクセスできます。たとえば、light オブジェクトの Color プロパティを設定することで光の色を変更します。

sl(2).Color = 'r';

同じサイズの 3 つの行列を作成し、表面としてプロットします。光源の方向を、方位角 45 度、仰角 20 度に指定します。周囲光の寄与を増加し、乱反射と正反射の寄与を減少することで表面の反射率を増加します。surface オブジェクトを変数 sl に代入します。

[X,Y] = meshgrid(1:0.5:10,1:20);
Z = sin(X) + cos(Y);
s = [-45 20];
k = [.65 .4 .3 10];

光源と反射率のベクトルを使用して、データをプロットします。

sl = surfl(X,Y,Z,s,k);

surface オブジェクトの作成後にそのプロパティにアクセスし、変更を加えるには、sl を使用します。たとえば、EdgeColor プロパティを設定することでエッジを非表示にします。

sl.EdgeColor = 'none';

入力引数

すべて折りたたむ

x 座標。Z と同じサイズの行列、または長さが n のベクトル ([m,n] = size(Z)) として指定します。XY の値を指定しない場合、surfl はベクトル (1:n) とベクトル (1:m) を使用します。

行列 X と行列 Y を作成するには、関数 meshgrid を使用できます。

Surface オブジェクトの XData プロパティに x 座標が格納されます。

例: X = 1:10

例: X = [1 2 3; 1 2 3; 1 2 3]

例: [X,Y] = meshgrid(-5:0.5:5)

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

y 座標。Z と同じサイズの行列、または長さ m のベクトルとして指定します。ここで、[m,n] = size(Z) です。XY の値を指定しない場合、surfl はベクトル (1:n) とベクトル (1:m) を使用します。

行列 X と行列 Y を作成するには、関数 meshgrid を使用できます。

surface オブジェクトの YData プロパティには y 座標が保存されます。

例: Y = 1:10

例: Y = [1 1 1; 2 2 2; 3 3 3]

例: [X,Y] = meshgrid(-5:0.5:5)

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

z 座標。行列として指定します。Z は少なくとも 2 行 2 列でなければなりません。

surface オブジェクトの ZData プロパティには z 座標が保存されます。

例: Z = [1 2 3; 4 5 6]

例: Z = sin(x) + cos(y)

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

表面から光源までの方向。2 要素または 3 要素のベクトルとして指定します。ベクトルの形式は [sx sy sz] または [azimuth elevation] です。既定の方向は、現在の視点の方向から反時計回りに 45°です。

反射定数。4 要素ベクトルとして指定します。このベクトルは、[ka kd ks shine] の形式を使用して、周囲光、乱反射、正反射および鏡面光係数の相対的な寄与を定義します。k の既定値は [.55 .6 .4 10] です。

プロット対象の座標軸。axes オブジェクトとして指定します。座標軸を指定しない場合、surfl は現在の座標軸にプロットします。

ヒント

  • 行列 X, Y, Z の点の順序は、パラメトリックな表面の内側と外側を定義します。反対側の表面が光源を反射するようにするには、surfl(X',Y',Z') を使用します。

拡張機能

R2006a より前に導入