gnuplotで極座標形式\((r,\theta)\)で、こんな感じの2次元のグラフ
Spacetime is warped and twisted by the
mass and spin of the earth. -GRAVITY PROBE B Testing Einstein’s Universeより
の、緑色のようなグラフを書きたいと思ったのが始まりです。
グラフの式を以下のように適当に書きます。
\(
\displaystyle \displaystyle f(r)=-\frac{1}{r^2+1}
\)
とモデル化しましょう。これを2つの方法でプロットします。
[adsense1]
gnuplot上で
splot -1/(x*x+y*y+1)
上の場合、これはグリッドがx,y方向に切られています。動径方向と角度方向に切りたい場合はどうすればいいでしょうか。
gnuplotでこれを実現する方法は少なくとも2つあります。
- データとしてファイルを作った後、splot
- 媒介変数表示を使う
です。今回は2番目の媒介変数表示を使って表示させます。
とりあえず、これで目的のグラフを得ることができます。
set parametric
set ur[0:5]
set vr[0:2*pi]
splot u*sin(v),u*cos(v),-1/(u**2+1)
set ur[0:5]
set vr[0:2*pi]
splot u*sin(v),u*cos(v),-1/(u**2+1)
仕組みは極座標とは
\(
\begin{align}
x&=r\cos\theta \\
y&=r\sin\theta
\end{align}
\)
なので、媒介変数uをrに、vをθをとみなせば書くことができます。
[adsense2]
3dプロットでの破綻
表面をカラー表示にしたいと思った時に、カラーに破綻が起こりました。
set parametric
splot u*sin(v),u*cos(v),-1/(u**2+1)
set ur[0:5]
set vr[0:2*pi]
set pm3d at s
unset sur
rep
splot u*sin(v),u*cos(v),-1/(u**2+1)
set ur[0:5]
set vr[0:2*pi]
set pm3d at s
unset sur
rep
これを解決するには
set pm3d depthorder
を追加してreplotすれば破綻しなくなります。set hidden3d のカラー版ですね。
参考
gnuplot demo script: surface2.dem