gnuplot / spherical_harmonics / parametric

媒介変数(parametric)表示

gnuplotで3次元関数を表示するには,変数 x,y を使って z=f(x,y)という
形でz座標を表す方法と,媒介変数(3次元の場合はu,v)を用いて,

x = f(u,v)
y = g(u,v)
z = h(u,v)

のように表現する方法があります.関数形f(x,y)が次のような簡単なものなら,
それを最初に定義しておいて,splotします.

gnuplot> f(x,y)=sin(x)*cos(y)
gnuplot> splot f(x,y)

しかし極座標表示されている関数は,簡単に “z=” の形で表現できないので,
その場合は媒介変数を用います.例えば,半径1の球面は x^2+y^2+z^2=1 なので,
z=sqrt(1-x*x-y*y) もしくは z = -sqrt(1-x*x-y*y)となり,zの正負2つの関数が
必要です.

パラメータで球面を表現するには,半径 r が一定という条件を変数u,vで
表すだけです.uとvを下の図にある角度として,これらを0から360まで変化
させ,その間に動径の長さ r が変化しないようにします.

coordinate1

角度u,vと動径rを用いると,x,y,zの座標は次のよう
に表すことができます.

x = r*cos(u)*cos(v)
y = r*sin(u)*cos(v)
z = r*sin(v)

球面はr=a=一定値なので,上の式の変数rを定数に
置き換えるだけです.a=1なら半径1の球面を表現します.

x = cos(u)*cos(v)
y = sin(u)*cos(v)
z = sin(v)


gnuplotで媒介変数を用いて球面を描くには,次のようにします.

gnuplot> set parametric

dummy variable is t for curves, u/v for surfaces
gnuplot> set angle degree
gnuplot> set urange [0:360]
gnuplot> set vrange [-90:90]
gnuplot> set isosample 72,36
gnuplot> set ticslevel 0
gnuplot> set size 0.7,1.0
gnuplot> a=1
gnuplot> splot a*cos(u)*cos(v),a*sin(u)*cos(v),a*sin(v)

sphere

角度の単位はdefaultではradですが,ちょっとメンドクサイのでこれを「度」
にしておき,変数u,vの範囲を0から360度まで変化させます.
set size
で縦横の比率を変えていますが,これは表示が球らしく見
えるように適当に与えたもので,意味はありません.これをしないと縦が
潰れた饅頭型になります.

表示のメッシュの細かさは, set isosample で調整します.与え
る数字が大きくなると,メッシュは細かくなります.最初の数字はuの数で,
経度に対応する線の数が変わります.2番目はvの数で,緯度の線が変化し
ます.


上の式は少々長くて扱いにくいのですが,このような場合には予め関数を
定義しておくと便利です.

gnuplot> fx(u,v)=cos(u)*cos(v)
gnuplot> fy(u,v)=sin(u)*cos(v)
gnuplot> fz(v)=sin(v)
gnuplot> splot a*fx(u,v),a*fy(u,v),a*fz(v)
up