曲面の3次元プロット
plot3d(x,y,z,[theta,alpha,leg,flag,ebox]) plot3d(x,y,z,<opt_args>) plot3d(xf,yf,zf,[theta,alpha,leg,flag,ebox]) plot3d(xf,yf,zf,<opt_args>) plot3d(xf,yf,list(zf,colors),[theta,alpha,leg,flag,ebox]) plot3d(xf,yf,list(zf,colors),<opt_args>) plot3d(z)
大きさ n1 および n2の行ベクトル (x軸およびy軸座標). これらの座標は単調である必要があります.
大きさ (n1,n2)の行列. z(i,j)
は点(x(i),y(j))における
曲面の値です.
大きさ (nf,n)の行列. 曲面を描画する際に使用される小平面を定義します.
n
個の小平面があります. 各小平面
i
はnf
個の点を有するポリゴンで定義されます.
i番目の小平面の点のx軸,y軸,z軸座標はそれぞれxf(:,i)
,
yf(:,i)
および zf(:,i)
により指定されます.
大きさnのベクトルで,各小平面の色を指定します,もしくは, 大きさ(nf,n)の行列で各小平面の境界近傍の色を指定します (小平面の色は補間されます).
一連の命令key1=value1,
key2=value2
,...を表し, key1
,
key2,...
は以下のどれかとすることができます: theta,
alpha ,leg,flag,ebox (以下の定義を参照).
観測点の球座標を指定する実数値(単位:度).
各軸のラベルを定義する文字列. @ をフィールドセパレータとし, "X@Y@Z"のようになります.
大きさ3の実数ベクトル.
flag=[mode,type,box]
.
整数 (曲面の色).
曲面は色"mode"
で塗られます ;
小平面の境界はカレントの線種と色で描画されます.
曲面のメッシュが描画されます.
曲面は色"-mode"
で塗られます ;
小平面の境界は描画されません.
曲面の色の取り扱いは,
surfaceエンティティプロパティによる
color_mode
および
color_flag
オプションを用いて
行われることに注意してください (surface_properties参照).
整数 (スケール).
プロットは
(前のparam3d
,
plot3d
, contour
または
plot3d1
のコールで設定された)
カレントの3次元スケールで行われます.
3次元ボックスのスケールがアスペクト比の最大値に基づき
自動的に調整され,
境界はオプションの引数ebox
の値で
指定されます.
3次元ボックスのスケールがアスペクト比の最大値に基づき 自動的に調整され, 境界は指令したデータにより計算されます.
オプションebox
で指定したボックス境界を有する
3次元等軸プロットで,type=1
に似ています.
データで定義された境界に基づく3次元等軸プロットで,
type=2
に似ています.
オプションebox
で指定されたボックス境界で
定義された境界に基づく3次元拡張等軸プロットで,
type=1
に似ています.
データで定義された境界に基づく3次元拡張等軸プロットで,
type=2
に似ています.
軸の境界は axes エンティティプロパティによりカスタマイズできる
ことに注意してください(axes_properties参照).
整数 (プロットの周囲のフレーム).
プロットの周囲に何も描画されません.
実装されていません (box=0と同様).
曲面の背後の軸のみが描画されます.
曲面を囲うボックスが描画され,キャプションが追加されます.
曲面を囲うボックスが描画され,キャプションと軸が追加されます.
軸のアスペクトもaxesエンティティのプロパティによりカスタマイズ できることに注意してください (axes_properties参照).
プロットの境界をベクトル
[xmin,xmax,ymin,ymax,zmin,zmax]
で指定します.
この引数は,flag
のtype
が1
,
3
または 5
に設定された場合,
使用されます (対応する動作については上記参照).
flag
が指定されない場合
ebox
は無視されます.
指定された場合, ebox
引数は,
data_bounds
に基づいて動作し,
axesエンティティのプロパティによりリセットすることも可能であることに
注意してください. ebox のデフォルト値は[0,1,0,1,0,1]です.(axes_properties参照)
plot3d(x,y,z,[theta,alpha,leg,flag,ebox])
は
パラメータ表現の曲面 z=f(x,y)
を描画します.
plot3d(xf,yf,zf,[theta,alpha,leg ,flag,ebox])
は小平面の集合で定義された曲面を描画します.
xf
, yf
および
zf
を
[xf1 xf2 ...]
, [yf1 yf2 ...]
および
[zf1 zf2 ...]
のように行単位で集約した
複数の行列で置き換えることにより
複数のプロットを描画することができます.
データはsurfaceエンティティパラメータにより設定または取得できること
に注意してください (surface_properties参照).
小平面の色をzf
ではなくlist(zf,colors)
により指定することができます.
ただし,colors
は大きさn
の
ベクトルです.
colors(i)
が正の場合,この値が小平面i
の
色を指定し,小平面の境界はカレントの線種と色で描画されます.
colors(i)
が負の場合, 色ID
-colors(i)
が使用され,小平面の境界は描画されません.
小平面に補間された色を適用することも可能です.
この場合, color 引数は nf x n の行列とする必要があり,その要素は
各小平面の極回近傍の色を指定します.
この場合, 正の値の色は境界が描画されないことを意味します.
色は( tlist
affectationsにより)
surface エンティティプロパティでも設定可能であり,
color_flag
オプションにより編集可能です
( surface_properties参照).
オプションの引数 theta, alpha, leg ,flag,
ebox
,を一連の命令
key1=value1, key2=value2
, ...により指定することができます.
この場合,順番は任意です.
これらのflag
以外のオプションの引数は
axesエンティティプロパティによりカスタマイズできます
(see axes_properties参照).
前述の通り, flag
オプションは
mode
についてはsurfaceエンティティプロパティ( surface_properties参照) ,
type
およびbox
については
axes プロパティ (axes_properties参照)
で扱うことができます.
曲面z=f(x,y)
から4角形の小平面を計算する際に
関数genfac3d
を使用することができます.
eval3dp
も使用できます.
コマンド plot3d()
を入力するとデモを参照できます.
// z=f(x,y) による簡単な例 t=[0:0.3:2*%pi]'; z=sin(t)*cos(t'); plot3d(t,t,z) // genfac3dにより計算された小平面を用いて同じ図をプロット [xx,yy,zz]=genfac3d(t,t,z); clf() plot3d(xx,yy,zz) // 複数のプロット clf() plot3d([xx xx],[yy yy],[zz 4+zz]) // カラーで複数のプロット clf() plot3d([xx xx],[yy yy],list([zz zz+4],[4*ones(1,400) 5*ones(1,400)])) // 視点とキャプションを指定してプロット clf() plot3d(1:10,1:20,10*rand(10,20),alpha=35,theta=45,flag=[2,2,3]) // eval3dp で計算された小平面により球をプロット deff("[x,y,z]=sph(alp,tet)",["x=r*cos(alp).*cos(tet)+orig(1)*ones(tet)";.. "y=r*cos(alp).*sin(tet)+orig(2)*ones(tet)";.. "z=r*sin(alp)+orig(3)*ones(tet)"]); r=1; orig=[0 0 0]; [xx,yy,zz]=eval3dp(sph,linspace(-%pi/2,%pi/2,40),linspace(0,%pi*2,20)); clf();plot3d(xx,yy,zz) clf(); f=gcf(); f.color_map = hotcolormap(128); r=0.3;orig=[1.5 0 0]; [xx1,yy1,zz1]=eval3dp(sph,linspace(-%pi/2,%pi/2,40),linspace(0,%pi*2,20)); cc=(xx+zz+2)*32;cc1=(xx1-orig(1)+zz1/r+2)*32; clf();plot3d1([xx xx1],[yy yy1],list([zz,zz1],[cc cc1]),theta=70,alpha=80,flag=[5,6,3]) delete(gcf()); t=[0:0.3:2*%pi]'; z=sin(t)*cos(t'); [xx,yy,zz]=genfac3d(t,t,z); plot3d([xx xx],[yy yy],list([zz zz+4],[4*ones(1,400) 5*ones(1,400)])) e=gce(); f=e.data; TL = tlist(["3d" "x" "y" "z" "color"],f.x,f.y,f.z,6*rand(f.z)); // ランダムな色の行列 e.data = TL; TL2 = tlist(["3d" "x" "y" "z" "color"],f.x,f.y,f.z,4*rand(1,800)); // ランダムな色のベクトル e.data = TL2; TL3 = tlist(["3d" "x" "y" "z" "color"],f.x,f.y,f.z,[20*ones(1,400) 6*ones(1,400)]); e.data = TL3; TL4 = tlist(["3d" "x" "y" "z"],f.x,f.y,f.z); // no color e.data = TL4; e.color_flag=1 // 高度 (z座標)に比例する色インデックス e.color_flag=2; // デフォルトモードに戻る e.color_flag= 3; // 補間陰影モード (デフォルト色の青に基づく) clf() plot3d([xx xx],[yy yy],list([zz zz+4],[4*ones(1,400) 5*ones(1,400)])) h=gce(); //カレントのエンティティ(ここでは曲面)のハンドルを取得 a=gca(); //カレントの軸を取得 a.rotation_angles=[40,70]; a.grid=[1 1 1]; //グリッドを作成 a.data_bounds=[-6,0,-1;6,6,5]; a.axes_visible="off"; //軸を隠す a.axes_bounds=[.2 0 1 1]; h.color_flag=1; //色は zに比例 h.color_mode=-2; //color_modeを白色に設定することにより小平面の境界を削除 h.color_flag=2; //指定した色に基づく色 h.color_mode = -1; //color_modeを黒色に設定することにより小平面の境界を戻す f=gcf();//親のfigureのハンドルを取得 f.color_map=hotcolormap(512); c=[1:400,1:400]; TL.color = [c;c+1;c+2;c+3]; h.data = TL; h.color_flag=3; // 補間陰影モード | ![]() | ![]() |
一連のパッチ(3角形,4角形,など)をプロットする際にplot3d関数を使用することができます.
// パッチを描画するe plot3d 関数: // patch(x,y,[z]) // patch(x,y,[list(z,c)]) // x の大きさ: パッチの点の数 x パッチの数 // y および z は x と同じ大きさ // c: // - パッチの数を大きさとするベクトル: パッチの色 // - 大きさがパッチの点の数 x パッチの数の行列 // : 各パッチの各点の色 // 例 1: 3角形パッチの集合 x = [0 0; 0 1; 1 1]; y = [1 1; 2 2; 2 1]; z = [1 1; 1 1; 1 1]; tcolor = [2 3]'; subplot(2,2,1); plot3d(x,y,list(z,tcolor)); xtitle('A triangle set of patches'); // 例2: 3角形および4角形パッチが混在 xquad = [5, 0; 10,0; 15,5; 10,5]; yquad = [15,0; 20,10; 15,15; 10,5]; zquad = ones(4,2); xtri = [ 0,10,10, 5, 0; 10,20,20, 5, 0; 20,20,15,10,10]; ytri = [ 0,10,20, 5,10; 10,20,20,15,20; 0, 0,15,10,20]; ztri = zeros(3,5); subplot(2,2,3); plot3d(xquad,yquad,zquad); plot3d(xtri,ytri,ztri); xtitle('Mixing triangle and quadrangle set of patches'); // 例3: いくつかのうさぎ rabxtri = [ 5, 5, 2.5, 7.5, 10; 5, 15, 5, 10, 10; 15, 15, 5, 10, 15]; rabytri = [10, 10, 9.5, 2.5, 0; 20, 10, 12, 5, 5; 10 0 7 0 0]; rabztri = [0,0,0,0,0; 0,0,0,0,0; 0,0,0,0,0]; rabtricolor_byface = [2 2 2 2 2]; rabtricolor = [2,2,2,2,2; 3,3,3,3,3; 4,4,4,4,4]; rabxquad = [0, 1; 0, 6; 5,11; 5, 6]; rabyquad = [18,23; 23,28; 23,28; 18,23]; rabzquad = [1,1; 1,1; 1,1; 1,1]; rabquadcolor_byface = [2 2]; rabquadcolor = [2,2; 3,3; 4,4; 5,5]; subplot(2,2,2); plot3d(rabxtri, rabytri, list(rabztri,rabtricolor)); plot3d(rabxquad,rabyquad,list(rabzquad,rabquadcolor)); h = gcf(); h.children(1).background = 1; xtitle('A psychedelic rabbit set of patches'); subplot(2,2,4); plot3d(rabxtri, rabytri, list(rabztri,rabtricolor_byface)); plot3d(rabxquad,rabyquad,list(rabzquad,rabquadcolor_byface)); h = gcf(); h.children(1).background = 1; xtitle('A standard rabbit set of patches'); | ![]() | ![]() |
頂点と面により一連のパッチをプロットするために plot3d関数を使用することもできます.
// 頂点 / 面の例: 3次元の例 // 各パッチを構成するユニークな点の一覧を有する頂点のリスト // 2つのパッチに共通な点は頂点のリストで反復されません vertex = [0 1 1; 0 2 2; 1 2 3; 1 1 4]; // 頂点のリストはどの点がパッチを構成するかを示します. face = [1 2 3; 1 3 4]; tcolor = [2 3]'; // x, y, z のリストで表された頂点/面を変換する際に使用される式 xvf = matrix(vertex(face,1),size(face,1),length(vertex(face,1))/size(face,1))'; yvf = matrix(vertex(face,2),size(face,1),length(vertex(face,1))/size(face,1))'; zvf = matrix(vertex(face,3),size(face,1),length(vertex(face,1))/size(face,1))'; scf(); subplot(2,1,1); plot3d(xvf,yvf,list(zvf,tcolor)); xtitle('A triangle set of patches - vertex / face mode - 3d'); // 2次元のテスト // 0 Z 値を有する3次元表現を使用した後, 2次元表現に切り替えます // 頂点/面の例: 3次元の例 // 頂点のリストには各パッチを構成するユニークな点の一覧を有します // 2つのパッチに共通する点は頂点のリスト内で繰り返されません vertex = [0 1; 0 2; 1 2; 1 1]; // 頂点のリストはどの点がパッチを構成するかを示します. face = [1 2 3; 1 3 4]; // x, y, z のリストで表された頂点/面を変換する際に使用される式 xvf = matrix(vertex(face,1),size(face,1),length(vertex(face,1))/size(face,1))'; yvf = matrix(vertex(face,2),size(face,1),length(vertex(face,1))/size(face,1))'; zvf = matrix(zeros(vertex(face,2)),size(face,1),length(vertex(face,1))/size(face,1))'; subplot(2,1,2); plot3d(xvf,yvf,list(zvf,tcolor)); xtitle('A triangle set of patches - vertex / face mode - 2D'); a = gca(); a.view = '2d'; | ![]() | ![]() |
マニュアルで目盛を設定する方法
plot3d(); h = gca(); h.x_ticks = tlist(['ticks','locations','labels'],[-2,-1,0,1,2],['-2','-1','0','1','2']); h.y_ticks = tlist(['ticks','locations','labels'],[-4,-3-2,-1,0,1,2,3,4],['-4','-3','-2','-1','0','1','2','3','4']); h.z_ticks = tlist(['ticks','locations','labels'],[-1,0,1],['Point 1','Point 2','Point 3']); | ![]() | ![]() |