gnuplot で斜方投射の速度ベクトルと軌道を描く

データファイルを使って gnuplot でベクトルを描く例。備忘録として。

$\theta = 45$° の斜方投射を規格化した時間と座標で書くとこんな感じ。

In [1]:
x(t) = 2 * t
y(t) = 2 * t - t**2

vx(t) = 2
vy(t) = 2 - 2*t

ベクトルの作図用にデータファイルを作成する。

In [2]:
s = 0.2
set print "v.txt"
  print "# x     y     vx    vy"
  do for [i=0:4]{
    t = 0.5 * i
    print sprintf("%5.2f %5.2f %5.2f %5.2f", \
                  x(t), y(t), s*vx(t), s*vy(t))
    }
set print

データファイルの中身の確認。

In [3]:
! cat v.txt
# x     y     vx    vy
 0.00  0.00  0.40  0.40
 1.00  0.75  0.40  0.20
 2.00  1.00  0.40  0.00
 3.00  0.75  0.40 -0.20
 4.00  0.00  0.40 -0.40

In [4]:
set parametric
set grid
set zeroaxis
set key samplen 1
set xrange [-0.5:4.5]
set yrange [-0.5:2]
set size ratio 0.5
set title "斜方投射の速度ベクトルと軌道"

plot [t=0:2] x(t), y(t) lw 2 notitle, \
  "v.txt" u 1:2:3:(0) w vec filled head lc "blue" lw 1.5 t "速度の x 成分",\
  "" u 1:2:(0):4 w vec filled head lc "red" lw 1.5 t "速度の y 成分",\
  "" u 1:2:3:4 w vec filled head lw 2 lc "black" t "速度ベクトル",\
  "" u 1:2 w p pt 6 pointsize 0.7 lc "dark-green" notitle