東京工業大学大学院理工学研究科基礎物理学専攻中村研究室メンバーTakayuki Sako

gnuplotのメモ


動作環境 gnuplot Version 4.2 patchlevel 5 @ Ubuntu9.10

3次元の円柱(横向き)を複数個重ねて表示

SOLDIRAsの出力のためのメモ。 つまり、何らかのプログラム中から吐き出すことを前提としたメモ。
gnuplot> splot [0:360] [20:270] v, 20 *cos(u) + ( -50.000000 ), 20 *sin(u) + ( 100.00000 ),[0:360] [50:150] v, 10 *cos(u) + ( -50.000000 ), 10 *sin(u) + ( 100.00000 )
とするとエラー。

gnuplot> set vrange [0:10]
gnuplot> set urange [0:360]
gnuplot> splot v, 20 *cos(u) + ( -50.000000 ), 20 *sin(u) + ( 100.00000 ), v+10 , 10 *cos(u) + ( -50.000000 ), 10 *sin(u) + ( 100.00000 )
これならOK

よって一般に底面の中心(x1,y1,z1),(x2,y2,z2)…、半径r1,r2…、高さL1,L2…の円柱(ただし、横向きなので底面はyz平面と平行)をプロットするためには
gnuplot> set parametric
gnuplot> set vrange [0:1]
gnuplot> set urange [0:360]
gnuplot> splot x1 + v * L1, r1 * cos(u) + y1, r1 * sin(u) + z1, x2 + v * L2, r2 * cos(u) + y2, r2 * sin(u) + z2, …
で良い。
ここでのポイントはvの範囲を[0,1]に固定する点にある。gnuplotではデフォルトの変数しか使えない?ようなので範囲を固定したvの定数倍と定数項の和により グラフごとに任意の範囲を実現できることになる。上の例ではuは[0,360]で固定してしまったが、半円などを描くためにはuも[0,1]にしてその都度範囲を書き換えるようにすれば良い。