- not so Frequently Asked Questions - update 2004/11/16
|
|
媒介変数(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 が変化しないようにします. 角度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) 角度の単位は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) |