1 <?xml version="1.0" encoding="UTF-8"?>
3 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
4 * Copyright (C) ENPC - Jean-Philippe Chancelier
6 * This file must be used under the terms of the CeCILL.
7 * This source file is licensed as described in the file COPYING, which
8 * you should have received as part of this distribution. The terms
9 * are also available at
10 * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
13 <refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns4="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" version="5.0-subset Scilab" xml:id="plot3d" xml:lang="ja">
15 <refname>plot3d</refname>
16 <refpurpose>曲面の3次元プロット</refpurpose>
20 <synopsis>plot3d(x,y,z,[theta,alpha,leg,flag,ebox])
21 plot3d(x,y,z,<opt_args>)
23 plot3d(xf,yf,zf,[theta,alpha,leg,flag,ebox])
24 plot3d(xf,yf,zf,<opt_args>)
26 plot3d(xf,yf,list(zf,colors),[theta,alpha,leg,flag,ebox])
27 plot3d(xf,yf,list(zf,colors),<opt_args>)
36 <para>大きさ n1 および n2の行ベクトル (x軸およびy軸座標).
45 大きさ (n1,n2)の行列. <literal>z(i,j)</literal> は点(x(i),y(j))における
53 <para>大きさ (nf,n)の行列. 曲面を描画する際に使用される小平面を定義します.
54 <literal>n</literal>個の小平面があります. 各小平面
55 <literal>i</literal> は<literal>nf</literal>個の点を有するポリゴンで定義されます.
56 i番目の小平面の点のx軸,y軸,z軸座標はそれぞれ<literal>xf(:,i)</literal>,
57 <literal>yf(:,i)</literal> および <literal>zf(:,i)</literal>により指定されます.
64 <para>大きさnのベクトルで,各小平面の色を指定します,もしくは,
65 大きさ(nf,n)の行列で各小平面の境界近傍の色を指定します
71 <term><opt_args></term>
74 一連の命令<literal>key1=value1,
77 ,...を表し, <literal>key1</literal>,
78 <literal>key2,...</literal> は以下のどれかとすることができます: theta,
79 alpha ,leg,flag,ebox (以下の定義を参照).
84 <term>theta, alpha</term>
86 <para>観測点の球座標を指定する実数値(単位:度).</para>
92 <para>各軸のラベルを定義する文字列. @ をフィールドセパレータとし,
101 <literal>flag=[mode,type,box]</literal>.
107 <para>整数 (曲面の色).</para>
110 <term>mode>0</term>
113 曲面は色<literal>"mode"</literal>で塗られます ;
114 小平面の境界はカレントの線種と色で描画されます.
121 <para>曲面のメッシュが描画されます.</para>
125 <term>mode<0:</term>
128 曲面は色<literal>"-mode"</literal>で塗られます ;
132 surfaceエンティティプロパティによる
133 <literal>color_mode</literal>および
134 <literal>color_flag</literal>オプションを用いて
135 行われることに注意してください (<link linkend="surface_properties">surface_properties</link>参照).
145 <para>整数 (スケール).</para>
151 (前の<literal>param3d</literal>,
152 <literal>plot3d</literal>, <literal>contour</literal> または
153 <literal>plot3d1</literal>のコールで設定された)
162 3次元ボックスのスケールがアスペクト比の最大値に基づき
164 境界はオプションの引数<literal>ebox</literal>の値で
173 3次元ボックスのスケールがアスペクト比の最大値に基づき
183 オプション<literal>ebox</literal>で指定したボックス境界を有する
184 3次元等軸プロットで,<literal>type=1</literal>に似ています.
191 <para>データで定義された境界に基づく3次元等軸プロットで,
192 <literal>type=2</literal>に似ています.
200 オプション<literal>ebox</literal>で指定されたボックス境界で
201 定義された境界に基づく3次元拡張等軸プロットで,
202 <literal>type=1</literal>に似ています.
210 データで定義された境界に基づく3次元拡張等軸プロットで,
211 <literal>type=2</literal>に似ています.
212 軸の境界は axes エンティティプロパティによりカスタマイズできる
213 ことに注意してください(<link linkend="axes_properties">axes_properties</link>参照).
223 <para>整数 (プロットの周囲のフレーム).</para>
228 <para>プロットの周囲に何も描画されません.</para>
234 <para>実装されていません (box=0と同様).</para>
240 <para>曲面の背後の軸のみが描画されます.</para>
246 <para>曲面を囲うボックスが描画され,キャプションが追加されます.</para>
253 曲面を囲うボックスが描画され,キャプションと軸が追加されます.
256 軸のアスペクトもaxesエンティティのプロパティによりカスタマイズ
257 できることに注意してください (<link linkend="axes_properties">axes_properties</link>参照).
272 <literal>[xmin,xmax,ymin,ymax,zmin,zmax]</literal>で指定します.
273 この引数は,<literal>flag</literal>の<literal>type</literal>が<literal>1</literal>,
274 <literal>3</literal> または <literal>5</literal>に設定された場合,
275 使用されます (対応する動作については上記参照).
276 <literal>flag</literal> が指定されない場合
277 <literal>ebox</literal> は無視されます.
280 指定された場合, <literal>ebox</literal>引数は,
281 <literal>data_bounds</literal>に基づいて動作し,
282 axesエンティティのプロパティによりリセットすることも可能であることに
283 注意してください. ebox のデフォルト値は[0,1,0,1,0,1]です.(<link linkend="axes_properties">axes_properties</link>参照)
292 <literal>plot3d(x,y,z,[theta,alpha,leg,flag,ebox])</literal> は
293 パラメータ表現の曲面 <literal>z=f(x,y)</literal>を描画します.
296 <literal>plot3d(xf,yf,zf,[theta,alpha,leg ,flag,ebox])</literal>
297 は小平面の集合で定義された曲面を描画します.
298 <literal>xf</literal>, <literal>yf</literal> および
299 <literal>zf</literal>を
300 <literal>[xf1 xf2 ...]</literal>, <literal>[yf1 yf2 ...]</literal> および
301 <literal>[zf1 zf2 ...]</literal>のように行単位で集約した
304 データはsurfaceエンティティパラメータにより設定または取得できること
305 に注意してください (<link linkend="surface_properties">surface_properties</link>参照).
309 小平面の色を<literal>zf</literal>ではなく<literal>list(zf,colors)</literal>
311 ただし,<literal>colors</literal> は大きさ<literal>n</literal>の
313 <literal>colors(i)</literal> が正の場合,この値が小平面<literal>i</literal>の
314 色を指定し,小平面の境界はカレントの線種と色で描画されます.
315 <literal>colors(i)</literal> が負の場合, 色ID
316 <literal>-colors(i)</literal>が使用され,小平面の境界は描画されません.
319 <para>小平面に補間された色を適用することも可能です.
320 この場合, color 引数は nf x n の行列とする必要があり,その要素は
322 この場合, 正の値の色は境界が描画されないことを意味します.
323 色は( <literal>tlist</literal> affectationsにより)
324 surface エンティティプロパティでも設定可能であり,
325 <literal>color_flag</literal>オプションにより編集可能です
326 ( <link linkend="surface_properties">surface_properties</link>参照).
330 オプションの引数 <literal>theta, alpha, leg ,flag,
334 <literal>key1=value1, key2=value2</literal>, ...により指定することができます.
336 これらの<literal>flag</literal>以外のオプションの引数は
337 axesエンティティプロパティによりカスタマイズできます
338 (see <link linkend="axes_properties">axes_properties</link>参照).
339 前述の通り, <literal>flag</literal> オプションは
340 <literal>mode</literal>についてはsurfaceエンティティプロパティ( <link linkend="surface_properties">surface_properties</link>参照) ,
341 <literal>type</literal> および<literal>box</literal>については
342 axes プロパティ (<link linkend="axes_properties">axes_properties</link>参照)
347 曲面<literal>z=f(x,y)</literal>から4角形の小平面を計算する際に
348 関数<literal>genfac3d</literal>を使用することができます.
349 <literal>eval3dp</literal> も使用できます.
353 コマンド <literal>plot3d()</literal> を入力するとデモを参照できます.
358 <programlisting role="example"><![CDATA[
363 // genfac3dにより計算された小平面を用いて同じ図をプロット
364 [xx,yy,zz]=genfac3d(t,t,z);
369 plot3d([xx xx],[yy yy],[zz 4+zz])
372 plot3d([xx xx],[yy yy],list([zz zz+4],[4*ones(1,400) 5*ones(1,400)]))
373 // 視点とキャプションを指定してプロット
375 plot3d(1:10,1:20,10*rand(10,20),alpha=35,theta=45,flag=[2,2,3])
376 // eval3dp で計算された小平面により球をプロット
377 deff("[x,y,z]=sph(alp,tet)",["x=r*cos(alp).*cos(tet)+orig(1)*ones(tet)";..
378 "y=r*cos(alp).*sin(tet)+orig(2)*ones(tet)";..
379 "z=r*sin(alp)+orig(3)*ones(tet)"]);
381 [xx,yy,zz]=eval3dp(sph,linspace(-%pi/2,%pi/2,40),linspace(0,%pi*2,20));
382 clf();plot3d(xx,yy,zz)
385 f.color_map = hotcolormap(128);
386 r=0.3;orig=[1.5 0 0];
387 [xx1,yy1,zz1]=eval3dp(sph,linspace(-%pi/2,%pi/2,40),linspace(0,%pi*2,20));
388 cc=(xx+zz+2)*32;cc1=(xx1-orig(1)+zz1/r+2)*32;
389 clf();plot3d1([xx xx1],[yy yy1],list([zz,zz1],[cc cc1]),theta=70,alpha=80,flag=[5,6,3])
392 t=[0:0.3:2*%pi]'; z=sin(t)*cos(t');
393 [xx,yy,zz]=genfac3d(t,t,z);
394 plot3d([xx xx],[yy yy],list([zz zz+4],[4*ones(1,400) 5*ones(1,400)]))
397 TL = tlist(["3d" "x" "y" "z" "color"],f.x,f.y,f.z,6*rand(f.z)); // ランダムな色の行列
399 TL2 = tlist(["3d" "x" "y" "z" "color"],f.x,f.y,f.z,4*rand(1,800)); // ランダムな色のベクトル
401 TL3 = tlist(["3d" "x" "y" "z" "color"],f.x,f.y,f.z,[20*ones(1,400) 6*ones(1,400)]);
403 TL4 = tlist(["3d" "x" "y" "z"],f.x,f.y,f.z); // no color
405 e.color_flag=1 // 高度 (z座標)に比例する色インデックス
406 e.color_flag=2; // デフォルトモードに戻る
407 e.color_flag= 3; // 補間陰影モード (デフォルト色の青に基づく)
409 plot3d([xx xx],[yy yy],list([zz zz+4],[4*ones(1,400) 5*ones(1,400)]))
410 h=gce(); //カレントのエンティティ(ここでは曲面)のハンドルを取得
412 a.rotation_angles=[40,70];
413 a.grid=[1 1 1]; //グリッドを作成
414 a.data_bounds=[-6,0,-1;6,6,5];
415 a.axes_visible="off"; //軸を隠す
416 a.axes_bounds=[.2 0 1 1];
417 h.color_flag=1; //色は zに比例
418 h.color_mode=-2; //color_modeを白色に設定することにより小平面の境界を削除
419 h.color_flag=2; //指定した色に基づく色
420 h.color_mode = -1; //color_modeを黒色に設定することにより小平面の境界を戻す
421 f=gcf();//親のfigureのハンドルを取得
422 f.color_map=hotcolormap(512);
424 TL.color = [c;c+1;c+2;c+3];
426 h.color_flag=3; // 補間陰影モード
428 <para>一連のパッチ(3角形,4角形,など)をプロットする際にplot3d関数を使用することができます.</para>
429 <programlisting role="example"><![CDATA[
430 // パッチを描画するe plot3d 関数:
432 // patch(x,y,[list(z,c)])
433 // x の大きさ: パッチの点の数 x パッチの数
434 // y および z は x と同じ大きさ
436 // - パッチの数を大きさとするベクトル: パッチの色
437 // - 大きさがパッチの点の数 x パッチの数の行列
457 plot3d(x,y,list(z,tcolor));
458 xtitle('A triangle set of patches');
460 // 例2: 3角形および4角形パッチが混在
474 xtri = [ 0,10,10, 5, 0;
478 ytri = [ 0,10,20, 5,10;
485 plot3d(xquad,yquad,zquad);
486 plot3d(xtri,ytri,ztri);
487 xtitle('Mixing triangle and quadrangle set of patches');
491 rabxtri = [ 5, 5, 2.5, 7.5, 10;
495 rabytri = [10, 10, 9.5, 2.5, 0;
498 rabztri = [0,0,0,0,0;
502 rabtricolor_byface = [2 2 2 2 2];
504 rabtricolor = [2,2,2,2,2;
523 rabquadcolor_byface = [2 2];
531 plot3d(rabxtri, rabytri, list(rabztri,rabtricolor));
532 plot3d(rabxquad,rabyquad,list(rabzquad,rabquadcolor));
534 h.children(1).background = 1;
535 xtitle('A psychedelic rabbit set of patches');
538 plot3d(rabxtri, rabytri, list(rabztri,rabtricolor_byface));
539 plot3d(rabxquad,rabyquad,list(rabzquad,rabquadcolor_byface));
541 h.children(1).background = 1;
542 xtitle('A standard rabbit set of patches');
544 <para>頂点と面により一連のパッチをプロットするために
545 plot3d関数を使用することもできます.
547 <programlisting role="example"><![CDATA[
550 // 各パッチを構成するユニークな点の一覧を有する頂点のリスト
551 // 2つのパッチに共通な点は頂点のリストで反復されません
558 // 頂点のリストはどの点がパッチを構成するかを示します.
564 // x, y, z のリストで表された頂点/面を変換する際に使用される式
566 xvf = matrix(vertex(face,1),size(face,1),length(vertex(face,1))/size(face,1))';
567 yvf = matrix(vertex(face,2),size(face,1),length(vertex(face,1))/size(face,1))';
568 zvf = matrix(vertex(face,3),size(face,1),length(vertex(face,1))/size(face,1))';
572 plot3d(xvf,yvf,list(zvf,tcolor));
573 xtitle('A triangle set of patches - vertex / face mode - 3d');
576 // 0 Z 値を有する3次元表現を使用した後, 2次元表現に切り替えます
580 // 頂点のリストには各パッチを構成するユニークな点の一覧を有します
581 // 2つのパッチに共通する点は頂点のリスト内で繰り返されません
588 // 頂点のリストはどの点がパッチを構成するかを示します.
592 // x, y, z のリストで表された頂点/面を変換する際に使用される式
594 xvf = matrix(vertex(face,1),size(face,1),length(vertex(face,1))/size(face,1))';
595 yvf = matrix(vertex(face,2),size(face,1),length(vertex(face,1))/size(face,1))';
596 zvf = matrix(zeros(vertex(face,2)),size(face,1),length(vertex(face,1))/size(face,1))';
599 plot3d(xvf,yvf,list(zvf,tcolor));
600 xtitle('A triangle set of patches - vertex / face mode - 2D');
604 <para>マニュアルで目盛を設定する方法</para>
605 <programlisting role="example"><![CDATA[
608 h.x_ticks = tlist(['ticks','locations','labels'],[-2,-1,0,1,2],['-2','-1','0','1','2']);
609 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']);
610 h.z_ticks = tlist(['ticks','locations','labels'],[-1,0,1],['Point 1','Point 2','Point 3']);
614 <refsection role="see also">
616 <simplelist type="inline">
618 <link linkend="eval3dp">eval3dp</link>
621 <link linkend="genfac3d">genfac3d</link>
624 <link linkend="geom3d">geom3d</link>
627 <link linkend="param3d">param3d</link>
630 <link linkend="plot3d1">plot3d1</link>
633 <link linkend="clf">clf</link>
636 <link linkend="gca">gca</link>
639 <link linkend="gcf">gcf</link>
642 <link linkend="xdel">xdel</link>
645 <link linkend="delete">delete</link>
648 <link linkend="axes_properties">axes_properties</link>