メインコンテンツ

surfl

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

  • Surface plot with colormap-based lighting

説明

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(___,Name=Value) は、1 つ以上の名前と値の引数を使用して表面プロットのプロパティを設定します。たとえば、表面の色と透明度を設定できます。プロパティの一覧については、Surface のプロパティ を参照してください。 (R2024b 以降)

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)

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

同じサイズの 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');

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

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

sl(2).Color = 'r';

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

同じサイズの 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);

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

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

sl.EdgeColor = 'none';

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

入力引数

すべて折りたたむ

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 は現在の座標軸にプロットします。

名前と値の引数

すべて折りたたむ

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

例: surfl(peaks,FaceAlpha=0.5) は、50% の透明度で表面をプロットします。

メモ

ここには一部のプロパティのみを示します。完全な一覧については、Surface のプロパティ を参照してください。

面の色。次の表のいずれかの値として指定します。

説明
'flat'

CData プロパティの値に基づいて面ごとに異なる色を使用します。まず、CData プロパティを ZData と同じサイズの行列として指定しなければなりません。各面の最初の頂点 (正の x 方向と y 方向) のカラー値が、面全体の色を決定します。この値は FaceAlpha プロパティが 'interp' に設定されている場合は使用できません。

Sample of a surface with each face a different color based on sample values in the CData property

'interp'

CData プロパティの値に基づいて、面ごとに内挿によるカラーリングを使用します。まず、CData プロパティを ZData と同じサイズの行列として指定しなければなりません。頂点のカラー値を内挿することにより、各面の端から端へと色が変化します。この値は FaceAlpha プロパティが 'flat' に設定されている場合は使用できません。

Sample of a surface with each face showing different interpolated coloring based on sample values in the CData property

RGB 3 成分、16 進数カラー コード、色名

指定した色をすべての面で使用します。このオプションは CData プロパティのカラー値を使用しません。

Sample of a surface with all faces shown in red

'texturemap'CData のカラー データを表面に適合するように変換します。
'none'面を描画しません。

RGB 3 成分および 16 進数カラー コードは、カスタム色を指定するのに役立ちます。

  • RGB 3 成分は、色の赤、緑、青成分の強度を指定する 3 成分の行ベクトルです。強度値は [0,1] の範囲でなければなりません。たとえば [0.4 0.6 0.7] のようになります。

  • 16 進数カラー コードは、ハッシュ記号 (#) で始まり、3 桁または 6 桁の 0 から F までの範囲の 16 進数が続く文字ベクトルまたは string スカラーです。この値は大文字と小文字を区別しません。したがって、カラー コード "#FF8800""#ff8800""#F80"、および "#f80" は等価です。

あるいは、名前を使用して一部の一般的な色を指定できます。次の表に、名前の付いた色オプション、等価の RGB 3 成分、および 16 進数カラー コードを示します。

色名省略名RGB 3 成分16 進数カラー コード外観
"red""r"[1 0 0]"#FF0000"

Sample of the color red

"green""g"[0 1 0]"#00FF00"

Sample of the color green

"blue""b"[0 0 1]"#0000FF"

Sample of the color blue

"cyan" "c"[0 1 1]"#00FFFF"

Sample of the color cyan

"magenta""m"[1 0 1]"#FF00FF"

Sample of the color magenta

"yellow""y"[1 1 0]"#FFFF00"

Sample of the color yellow

"black""k"[0 0 0]"#000000"

Sample of the color black

"white""w"[1 1 1]"#FFFFFF"

Sample of the color white

次の表に、ライト テーマとダーク テーマでのプロットの既定のカラー パレットを示します。

パレットパレットの色

"gem" — ライト テーマの既定値

R2025a より前: ほとんどのプロットで、これらの色が既定で使用されます。

Sample of the "gem" color palette

"glow" — ダーク テーマの既定値

Sample of the "glow" color palette

orderedcolors 関数と rgb2hex 関数を使用すると、これらのパレットの RGB 3 成分および 16 進数カラー コードを取得できます。たとえば、"gem" パレットの RGB 3 成分を取得し、16 進数カラー コードに変換します。

RGB = orderedcolors("gem");
H = rgb2hex(RGB);

R2023b より前: RGB = get(groot,"FactoryAxesColorOrder") を使用して、RGB 3 成分を取得します。

R2024a より前: H = compose("#%02X%02X%02X",round(RGB*255)) を使用して、16 進数カラー コードを取得します。

面の透明度。次の値のいずれかとして指定します。

  • 範囲 [0,1] のスカラー — すべての面に一様な透明度を使用します。値 1 は完全に不透明で、値 0 は完全に透明です。01 の間の値は半透明です。このオプションは AlphaData プロパティの透明度値を使用しません。

  • 'flat'AlphaData プロパティの値に基づいて面ごとに異なる透明度を使用します。面全体の透明度は、最初の頂点の透明度値によって決まります。まず AlphaData プロパティを ZData プロパティと同じサイズの行列として指定しなければなりません。FaceColor プロパティも、'flat' に設定しなければなりません。

  • 'interp'AlphaData プロパティの値に基づいて面ごとに内挿された透明度を使用します。頂点の値を内挿することにより、各面に異なる透明度が使用されます。まず AlphaData プロパティを ZData プロパティと同じサイズの行列として指定しなければなりません。FaceColor プロパティも、'interp' に設定しなければなりません。

  • 'texturemap'AlphaData のデータを表面に適合するように変換します。

エッジのラインの色。次のいずれかの値として指定します。既定の色は [0 0 0] で、これは黒色のエッジに対応します。

説明
'none'エッジを描画しません。
'flat'

CData プロパティの値に基づいてエッジごとに異なる色を使用します。まず、CData プロパティを ZData と同じサイズの行列として指定しなければなりません。各面の最初の頂点 (正の x 方向と y 方向) のカラー値が、隣接するエッジの色を決定します。この値は EdgeAlpha プロパティが 'interp' に設定されている場合は使用できません。

Sample of a surface with each edge a different color based on sample values in the CData property

'interp'

CData プロパティの値に基づいて、エッジごとに内挿によるカラーリングを使用します。まず、CData プロパティを ZData と同じサイズの行列として指定しなければなりません。頂点でのカラー値を線形内挿することにより、各エッジの端から端に向かって色が変化します。この値は EdgeAlpha プロパティが 'flat' に設定されている場合は使用できません。

Sample of a surface with each edge showing different interpolated coloring based on sample values in the CData property

RGB 3 成分、16 進数カラー コード、色名

指定した色をすべてのエッジに使用します。このオプションは CData プロパティのカラー値を使用しません。

Sample of a surface with all edges shown in red

RGB 3 成分および 16 進数カラー コードは、カスタム色を指定するのに役立ちます。

  • RGB 3 成分は、色の赤、緑、青成分の強度を指定する 3 成分の行ベクトルです。強度値は [0,1] の範囲でなければなりません。たとえば [0.4 0.6 0.7] のようになります。

  • 16 進数カラー コードは、ハッシュ記号 (#) で始まり、3 桁または 6 桁の 0 から F までの範囲の 16 進数が続く文字ベクトルまたは string スカラーです。この値は大文字と小文字を区別しません。したがって、カラー コード "#FF8800""#ff8800""#F80"、および "#f80" は等価です。

あるいは、名前を使用して一部の一般的な色を指定できます。次の表に、名前の付いた色オプション、等価の RGB 3 成分、および 16 進数カラー コードを示します。

色名省略名RGB 3 成分16 進数カラー コード外観
"red""r"[1 0 0]"#FF0000"

Sample of the color red

"green""g"[0 1 0]"#00FF00"

Sample of the color green

"blue""b"[0 0 1]"#0000FF"

Sample of the color blue

"cyan" "c"[0 1 1]"#00FFFF"

Sample of the color cyan

"magenta""m"[1 0 1]"#FF00FF"

Sample of the color magenta

"yellow""y"[1 1 0]"#FFFF00"

Sample of the color yellow

"black""k"[0 0 0]"#000000"

Sample of the color black

"white""w"[1 1 1]"#FFFFFF"

Sample of the color white

次の表に、ライト テーマとダーク テーマでのプロットの既定のカラー パレットを示します。

パレットパレットの色

"gem" — ライト テーマの既定値

R2025a より前: ほとんどのプロットで、これらの色が既定で使用されます。

Sample of the "gem" color palette

"glow" — ダーク テーマの既定値

Sample of the "glow" color palette

orderedcolors 関数と rgb2hex 関数を使用すると、これらのパレットの RGB 3 成分および 16 進数カラー コードを取得できます。たとえば、"gem" パレットの RGB 3 成分を取得し、16 進数カラー コードに変換します。

RGB = orderedcolors("gem");
H = rgb2hex(RGB);

R2023b より前: RGB = get(groot,"FactoryAxesColorOrder") を使用して、RGB 3 成分を取得します。

R2024a より前: H = compose("#%02X%02X%02X",round(RGB*255)) を使用して、16 進数カラー コードを取得します。

エッジの透明度。次の値のいずれかとして指定します。

  • 範囲 [0,1] のスカラー — すべてのエッジに一様な透明度を使用します。値 1 は完全に不透明で、値 0 は完全に透明です。01 の間の値は半透明です。このオプションは AlphaData プロパティの透明度値を使用しません。

  • 'flat'AlphaData プロパティの値に基づいてエッジごとに異なる透明度を使用します。まず AlphaData プロパティを ZData プロパティと同じサイズの行列として指定しなければなりません。エッジ全体の透明度は、最初の頂点の透明度値によって決まります。EdgeColor プロパティも、'flat' に設定しなければなりません。

  • 'interp'AlphaData プロパティの値に基づいて、エッジごとに内挿した透明度を使用します。まず AlphaData プロパティを ZData プロパティと同じサイズの行列として指定しなければなりません。頂点の値を内挿することにより、各エッジに一様でない透明度が使用されます。EdgeColor プロパティも、'interp' に設定しなければなりません。

ヒント

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

拡張機能

すべて展開する

バージョン履歴

R2006a より前に導入

すべて展開する