# surf

3次元曲面プロット

## 呼び出し手順

    surf(Z,<GlobalProperty>)
                surf(Z,color,<GlobalProperty>)
                surf(X,Y,Z,<color>,<GlobalProperty>)
                surf(<axes_handle>,...)

## 引数

Z

  曲面の高さを定義する実数行列.省略することはできません. Zデータは`m`x`n`行列です.

X,Y

  実数の行列とベクトル: 常にセットで設定し,これらのデータは新しい標準グリッドを 定義します.この新しいグリッドの`X` および `Y` 要素は`Z`の次元に一致している必要があります (下記説明参照).

color

  オプションの実数行列で,グリッドの 各点`(X(j),Y(i))`に関する色の値を定義します (下記説明参照).

<GlobalProperty>

  このオプションの引数は, グローバルオブジェクトのプロパティを定義する 一連の命令`{PropertyName,PropertyValue}`を表し, このプロットで作成された全ての曲線に適用されます (利用可能なプロパティの完全なリストについては, GlobalPropertyを参照.)

<axes_handle>

  このオプションの引数は, カレントの軸 (gca参照)ではなく, `axes_handle`により指定された軸の内部へのプロットを 強制します.

## 説明

`surf` は, `X` `Y`座標で定義される矩形グリッドを用いて パラメータ表現の曲面をカラーでプロットします. (if `{X,Y}`が指定されない場合, このグリッドは `Z`行列の次元により定義されます); このグリッドの各点において Z座標は`Z`行列により指定されます(必須のデータのみ). `surf`はMatlabの構文をより良く扱うために作成されました. グラフィックの互換性を改善するために, Matlabユーザは ( plot3dではなく) `surf` を使用する必要があります.

データエントリの仕様 :

このパラグラフでは,より明確化するために, `GlobalProperty`オプション引数について言及しません. これは,それらがentry dataと干渉しないからです. (`"Xdata"`, `"Ydata"` および `"Zdata"` プロパティを除く, GlobalProperty参照). これらのオプションの引数も全て使用可能と仮定されます.

`Z`行列のみが指定された場合, surf(Z)は, `1:size(Z,2)`をx軸,`1:size(Z,1)`をy軸として定義した グリッドに対して行列`Z`をプロットします.

組`{X,Y,Z}`が指定された場合, `Z`は,大きさ(`Z`)= [`m`x`n`] の行列とします. `X`または `Y` 次のようになります :

- a) ベクトル : `X` がベクトルの場合, length(`X`)=`n`です. `Y`がベクトルの場合, length(`Y`)=`m`です.

  b) 行列 : この場合, size(`X`) (または size(`Y`)) は size(`Z`)に等しい必要があります.

Colorエントリの仕様 :

前記のように, 曲面は矩形グリッドのサポートにより作成されます. 以下のような2つの独立変数 `i` および `j`を考えてみましょう:

この仮想的な矩形グリッドは, `XY`平面に支持された 実際の曲面を構築する際に使用されます. 実際には, `X`,`Y` および `Z` データは (`X` または `Y` がベクトルの場合でも, 下記参照) 同じ大きさを有し, 曲面を指定する3つの関数`x(i,j)`, `y(i,j)` および `z(i,j)`として扱うことができます. `X` または`Y`がベクトルの場合, 内部的には行列`Z`の次元と一致する正しい行列を作成する ために使用されます(グリッドは強制的に矩形領域となります).

3つの関数`x(i,j)`, `y(i,j)` および `z(i,j)`を考えると, 連続する2つの`i` and `j`の間で 定義される曲面の部分は,パッチと呼ばれます.

デフォルトで, color行列がsurfのコール時に付加されない場合, colorパラメータは`Z`データにリンクされます. `color`行列が指定された場合, 2種類の異なる手段でパッチに適用されます: 頂点または各パッチの中心.

これにより, `Z` が [`m`x`n`]行列の場合, `C color`行列の次元は[`m`x`n`] (頂点毎に1つの色)または [`m-1`x`n-1`] (パッチ毎に1色)とします.

Colorの表現はいくつかのGlobalProperyの設定によっても変化します:

`FaceColor`プロパティは影モードを設定します : この値は`'interp'` または `'flat'` (デフォルトモード)となります. `'interp'`が選択された場合, パッチに双一次色補間が適用されます. size(`C`) が size(`Z`)-1 に等しい場合 (すなわち,各パッチ毎に1色のみが指定される場合), パッチを定義する頂点の色はそのパッチに指定された色に設定されます.

`'flat'` (デフォルトモード) が有効の場合, カラー小平面表現(パッチ毎に1色)を使用します. size(`C`)がsize(`Z`) (すなわち, 各頂点毎に1つの色のみを指定した場合)に等しい場合, `C` の最後の行と列は無視されます.

`GlobalProperty` 引数は曲面をカスタマイズする際に使用されます. 以下にその動作について簡単に説明します:

GlobalProperty

  このオプションは曲面の描画方法を指定するために使用できます. これは, `PropertyName`およびその値 `PropertyValue`(`PropertyName`の型に 依存して文字列,整数または...となります) を定義する文字列から構成される一連の命令となります. 複数のプロパティを設定することもできます: 面および縁の色, 色データ, 色データのマッピング, クリッピングおよび 曲面の縁の厚さ... (GlobalProperty参照 )

  これらのプロパティは全てsurfaceエンティティプロパティにより(再)設定できます (surface_properties参照).

## 注意

デフォルトで, 連続する曲面のプロットは重ね描きされます. 前のプロットを消去するには,`clf()`を使用してください. T`auto_clear`モードをデフォルトのモードとして有効にするには, デフォルトの軸を以下のように編集してください:

da=gda();

da.auto_clear = 'on'

コマンド `surf` によりデモを参照できます.

## 例

surf();

## 例

    // Zの初期化

    Z= [   0.0001    0.0013    0.0053   -0.0299   -0.1809   -0.2465   -0.1100   -0.0168   -0.0008   -0.0000
        0.0005    0.0089    0.0259   -0.3673   -1.8670   -2.4736   -1.0866   -0.1602   -0.0067    0.0000
        0.0004    0.0214    0.1739   -0.3147   -4.0919   -6.4101   -2.7589   -0.2779    0.0131    0.0020
       -0.0088   -0.0871    0.0364    1.8559    1.4995   -2.2171   -0.2729    0.8368    0.2016    0.0130
       -0.0308   -0.4313   -1.7334   -0.1148    3.0731    0.4444    2.6145    2.4410    0.4877    0.0301
       -0.0336   -0.4990   -2.3552   -2.1722    0.8856   -0.0531    2.6416    2.4064    0.4771    0.0294
       -0.0137   -0.1967   -0.8083    0.2289    3.3983    3.1955    2.4338    1.2129    0.2108    0.0125
       -0.0014   -0.0017    0.3189    2.7414    7.1622    7.1361    3.1242    0.6633    0.0674    0.0030
        0.0002    0.0104    0.1733    1.0852    2.6741    2.6725    1.1119    0.1973    0.0152    0.0005
        0.0000    0.0012    0.0183    0.1099    0.2684    0.2683    0.1107    0.0190    0.0014    0.0000];

    //簡単な曲面
    surf(Z); // X および Y はZの次元により定義されます

    // 面の色が赤,縁が青の同じ曲面
    scf(2); // 図2を新規作成
    surf(Z,'facecol','red','edgecol','blu")

    // X および Y の初期化
    // NB: here, X has the same lines and Y the same columns
    X = [ -3.0000   -2.3333   -1.6667   -1.0000   -0.3333    0.3333    1.0000    1.6667    2.3333    3.0000
       -3.0000   -2.3333   -1.6667   -1.0000   -0.3333    0.3333    1.0000    1.6667    2.3333    3.0000
       -3.0000   -2.3333   -1.6667   -1.0000   -0.3333    0.3333    1.0000    1.6667    2.3333    3.0000
       -3.0000   -2.3333   -1.6667   -1.0000   -0.3333    0.3333    1.0000    1.6667    2.3333    3.0000
       -3.0000   -2.3333   -1.6667   -1.0000   -0.3333    0.3333    1.0000    1.6667    2.3333    3.0000
       -3.0000   -2.3333   -1.6667   -1.0000   -0.3333    0.3333    1.0000    1.6667    2.3333    3.0000
       -3.0000   -2.3333   -1.6667   -1.0000   -0.3333    0.3333    1.0000    1.6667    2.3333    3.0000
       -3.0000   -2.3333   -1.6667   -1.0000   -0.3333    0.3333    1.0000    1.6667    2.3333    3.0000
       -3.0000   -2.3333   -1.6667   -1.0000   -0.3333    0.3333    1.0000    1.6667    2.3333    3.0000
       -3.0000   -2.3333   -1.6667   -1.0000   -0.3333    0.3333    1.0000    1.6667    2.3333    3.0000];

    Y= [   -3.0000   -3.0000   -3.0000   -3.0000   -3.0000   -3.0000   -3.0000   -3.0000   -3.0000   -3.0000
       -2.3333   -2.3333   -2.3333   -2.3333   -2.3333   -2.3333   -2.3333   -2.3333   -2.3333   -2.3333
       -1.6667   -1.6667   -1.6667   -1.6667   -1.6667   -1.6667   -1.6667   -1.6667   -1.6667   -1.6667
       -1.0000   -1.0000   -1.0000   -1.0000   -1.0000   -1.0000   -1.0000   -1.0000   -1.0000   -1.0000
       -0.3333   -0.3333   -0.3333   -0.3333   -0.3333   -0.3333   -0.3333   -0.3333   -0.3333   -0.3333
        0.3333    0.3333    0.3333    0.3333    0.3333    0.3333    0.3333    0.3333    0.3333    0.3333
        1.0000    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000
        1.6667    1.6667    1.6667    1.6667    1.6667    1.6667    1.6667    1.6667    1.6667    1.6667
        2.3333    2.3333    2.3333    2.3333    2.3333    2.3333    2.3333    2.3333    2.3333    2.3333
        3.0000    3.0000    3.0000    3.0000    3.0000    3.0000    3.0000    3.0000    3.0000    3.0000];

    // 例 1
    scf(3)
    surf(X,Y,Z)

    // 例2
    // 見てわかるように,グリッドは矩形には不要
    scf(4)
    X(1,4) = -1.5;
    Y(1,4) = -3.5;
    Z(1,4) = -2;
    surf(X,Y,Z)

    // 例3
    // X および Y はベクトル => サンプル1と同じ動作
    // ベクトルを指定すると, グリッドは必然的に矩形となる
    scf(5)// 図5を新規作成
    X=[ -3.0000   -2.3333   -1.6667   -1.0000   -0.3333    0.3333    1.0000    1.6667    2.3333    3.0000];
    Y=X;
    surf(X,Y,Z)

    //LineSpec および GlobalProperty の例:
    xdel(winsid()) // 既存の図を全て削除
    surf(Z,Z+5) // color 配列を指定
    e=gce();
    e.cdata_mapping='direct' // デフォルトはカラーマップに関して 'scaled' r
    e.color_flag=3; // 補間影モード. surf のデフォルトは 4 ('flat' モード)

    scf(2)
    surf(X,Y,Z,'colorda',ones(10,10),'edgeco','cya','marker','penta','markersiz',20,'markeredg','yel','ydata',56:65)

    scf(3)
    surf(Z,'cdatamapping','direct')
    scf(4)
    surf(Z,'facecol','interp') // 補間影モード (color_flag == 3)

    scf(10)
    axfig10=gca();
    scf(11);
    surf(axfig10,Z,'ydat',[100:109],'marker','d','markerfac','green','markeredg','yel') // draw onto the axe of figure 10

    xdel(winsid())

## 参照

- plot2d
- clf
- xdel
- delete
- LineSpec
- GlobalProperty