A:gnuplotは端末としてtableを指定すると,(x,y,z)データファイルが生成されます.このデータファイルを他の3次元ビューアの書式に変換すればよいでしょう.
ここでは,
- 変換ツールのソースファイル:tbl2mesh.c.gz
gcc -o tbl2mesh tbl2mesh.c -lm
でtbl2meshを作成し,カレントディレクトリにおいてください.
tbl2meshは(x,y,z)座標に加えて,RGB色情報をpm3dのrgbformulaeのスキームに基づいて
出力します.pm3dのrgbformulaeについてはgnuplotを起動して,
gnuplot> help rgbformulae
で調べてください.コツを掴むのに少し時間が要るかもしれません.
-
起動するgeomviewの初期設定ファイル ~/.geomview に以下のような記述をしてあ
ります(Lisp風).なぜなら,geomview はz軸正方向にカメラ
を設置して原点を見る構えになっていますが,gnuplotで描い
た3次元図はz軸を斜めに望む視点からでないと形が分かりませ
ん.そこで,カメラ(視点)を変えずに,オブジェクトを回転
させて僅か斜め上からの描像となるようにしています.
(progn
(backcolor g0 0 0.2 0.2)
(bbox-draw g0 no)
(transform g0 g0 g0 rotate -1.2 0 0)
(transform g0 g0 g0 scale 1.1 1.1 1.1)
(merge-baseap smooth)
)
- 例1
set samples 36
set isosamples 36
set ticslevel 0
C = 10
set xrange [-C:C]
set yrange [-C:C]
set table "sombrero.tbl"
splot C*sin(sqrt(x**2+y**2))/sqrt(x**2+y**2)
! ./tbl2mesh -r2 -g9 -b0 <sombrero.tbl >sombrero.mesh
! geomview sombrero.mesh
|
geomview上では色や反射や環境光の設定ができるので,かなり楽しめます.
|
- 例2
set parametric
set samples 72
set isosamples 48
set urange[0:3.1*pi]
set vrange[-pi:pi]
set table "shell.tbl"
x(u,v) = u*(1+0.5*cos(v))*cos(u)
y(u,v) = 0.5*u*sin(v)
z(u,v) = -u*(1+0.5*cos(v))*sin(u)
splot x(u,v),y(u,v),z(u,v)
! ./tbl2mesh -r3 -g28 -b23 <shell.tbl >shell.mesh
! geomview -c "(merge-baseap flat)" shell.mesh
|
flatを指定するとpolygonで描画します
|
- 例3
# Ref.
# http://www.geocities.co.jp/SiliconValley-Oakland/1253/graphics.htm
bx(u) = 6*cos(u)*(1+sin(u))
by(u) = 16*sin(u)
rad(u) = 4*(1 - cos(u)/2)
xp(u,v)=(pi<=u && u<=2*pi)?bx(u)+rad(u)*cos(v+pi):bx(u)+rad(u)*cos(u)*cos(v)
yp(u,v)=(pi<=u && u<=2*pi)?by(u):by(u)+rad(u)*sin(u)*cos(v)
set isosamples 24
set samples 72
set parametric
set urange [0:2*pi]
set vrange [0:2*pi]
set size 0.7,1
set ticslevel 0
set table "klein.tbl"
splot xp(u,v), yp(u,v), rad(u)*sin(v)
! ./tbl2mesh <klein.tbl >klein.mesh
! geomview -c "(transform g0 g0 g0 rotate -1.2 0.3 -0.3)" klein.mesh
|
クラインの壺(1)
|
- 例4
# Ref.
# http://www.math.berkeley.edu/~hthall/old/(klein.txt)
pz(t)=cos(t)**2
py(t)=-cos(t)**3*sin(t)
tz(t)=-1./36*cos(t)*(-3+4*cos(t)**2)*(3*sin(2*t)+4)
ty(t)=1./18*sin(t)*(3*sin(2*t)+4)
tx(t)=sqrt(tz(t)**2+ty(t)**2)
set isosamples 24
set samples 96
set parametric
set urange [-pi/2:3*pi/2]
set vrange [0:2*pi]
set table "klein2.tbl"
splot tx(u)*sin(v), -(py(u)+ty(u)*cos(v)), -(pz(u)+tz(u)*cos(v))
!./tbl2mesh -r2 -g2 -b20 <klein2.tbl >klein2.mesh
! geomview -c "(merge-baseap flat); (transform g0 g0 g0 rotate 0 0 -0.4)" \
klein2.mesh
|
クラインの壺(2)
|
- 例5
# Ref.
# http://ayapin.film.sdendai.ac.jp/~matuda/Gnuplot/pm3d.html
x(u,v)= v < 2*pi ? (2.5-1.5*cos(v))*cos(u):\
v < 3*pi ? -2+(2+cos(u))*cos(v): -2+2*cos(v)-cos(u)
y(u,v)= v < 2*pi ? (2.5-1.5*cos(v))*sin(u): \
v < 3*pi ? sin(u): sin(u)
z(u,v)= v < pi ? -2.5*sin(v): v < 2*pi ? 3*v-3*pi:\
v < 3*pi ? (2+cos(u))*sin(v)+3*pi: -3*v+12*pi
set parametric
set sample 18
set isosamples 72
set urange[0:2*pi]
set vrange[0:4*pi]
set table "klein3.tbl"
splot x(u,v), y(u,v), -z(u,v)
! ./tbl2mesh -r3 -g2 -b3 <klein3.tbl >klein3.mesh
! geomview "(merge-baseap flat); \
(merge-ap g0 appearance { \
*transparent \
material{*alpha 0.5}} \
)" klein3.mesh
|
クラインの壺(3):50%透明にしてみました.
|
- 例6
# Ref. Wolfram MathWorld
# http://mathworld.wolfram.com/KuenSurface.html
set parametric
set ticslevel 0
set samples 51
set isosamples 51
set urange [-4.5:4.5]
set vrange [0.05:pi-0.05]
set table "Kuen.tbl"
x(u,v) = 2*(cos(u)+u*sin(u))*sin(v) / (1+u**2.*(sin(v))**2)
y(u,v) = 2*(sin(u)-u*cos(u))*sin(v) / (1+u**2.*(sin(v))**2)
z(u,v) = log(tan(v/2))+2*cos(v)/(1+u**2*(sin(v))**2)
splot x(u,v), y(u,v), z(u,v)
! ./tbl2mesh -r0 -g17 -b20 <Kuen.tbl >Kuen.mesh
! geomview -c "(merge-baseap flat)" Kuen.mesh
|
Kuen曲面
|
- 例7
# Ref. Wolfram MathWorld
# http://mathworld.wolfram.com/BoySurface.html
w=sqrt(2)
a=1
#a=0 Roman surface
x(u,v)=(w*cos(2*u)*cos(v)**2+cos(u)*sin(2*v))/(2-a*w*sin(3*u)*sin(2*v))
y(u,v)=(w*sin(2*u)*cos(v)**2-sin(u)*sin(2*v))/(2-a*w*sin(3*u)*sin(2*v))
z(u,v)=3*cos(v)**2/(2-a*w*sin(3*u)*sin(2*v))
set parametric
set urange [-pi:pi]
set vrange [0:pi]
set samples 96
set isosamples 48
set table "Boy.tbl"
splot x(u,v), y(u,v), z(u,v)
! ./tbl2stoff -r2 -g8 -b2 <Boy.tbl >Boy.off
! geomview -c "(merge-ap g0 appearance { \
+texturing \
texture { \
file pattern.jpg \
transform 1 0 0 0 0 1 0 0 0 0 0.1 0 0 0 0 0.1 \
} \
})" Boy.off
|
Boy曲面:textureを貼り付けました.そのためにはCMESHではなくSTCOFFというフォーマットに変換する必要があります.tbl2stoff.c.gz
|
- 例8
# Ref. Wolfram MathWorld
# http://mathworld.wolfram.com/Ding-DongSurface.html
x(u,v)=v*sqrt(1-v)*cos(u)
y(u,v)=v*sqrt(1-v)*sin(u)
z(u,v)=v
set parametric
set urange [-pi:pi]
set vrange [-1:1]
set samples 32
set isosamples 24
set table "DingDong.tbl"
splot x(u,v), y(u,v), z(u,v)
! ./tbl2stoff -r2 -g8 -b2 <DingDong.tbl >DingDong.off
! geomview -c "(merge-ap g0 appearance { \
+texturing \
texture { \
file bathroom.jpg \
transform 1 -1 0 0 1 1 0 0 0 0 0 0.1 0 0 0 0.1 \
} \
})" DingDong.off
|
textuteを45°回転しています.
|