機械式時計の理論

機械式時計の理論


4-2 gnuplot サンプルプログラム

4-2-7 自由端平ヒゲの作図


# パラメトリック表示設定
set parametric

# 格子設定
set grid

# グラフ縦横比設定
set size ratio -1

# アルキメデス曲線の始点角θ0、終点角θ1の設定 [rad]
t0=8*pi   # 積分区間の下限
t1=100   # 積分区間の上限

# サンプル数設定 N
N=10000   # 積分区間の分割数

# 内端点回転角  a [rad]
a=5.5

# アルキメデス曲線の全長 L
L=0.5*(t1*sqrt(1+t1**2)+log(t1+sqrt(1+t1**2))\
   -t0*sqrt(1+t0**2)-log(t0+sqrt(1+t0**2)))

# 被積分関数
f(t)=-a/L*sqrt(1+t**2)*(t*cos(t)*sin(a*(L-s)/L)\
       +t*sin(t)*cos(a*(L-s)/L)) #実数部被積分関数
g(t)=a/L*sqrt(1+t**2)*(t*cos(t)*cos(a*(L-s)/L)\
      -t*sin(t)*sin(a*(L-s)/L)) #虚数部被積分関数

set trange [t0:t1]
set samples N+1

# いったん別ファイルに書き込む
set table "table10.txt"

plot lastx=0.0,lastyr=0.0,lastyi=0.0,integr = 0.0,\
     integi = 0.0,old1=0,old2=0,old3=0,\
     integzr=0,integzi=0,integL=0,\
     "+" using 1 : (dx=$1-lastx, \
     s=0.5*($1*sqrt(1+$1**2)+log($1+sqrt(1+$1**2))\
       -t0*sqrt(1+t0**2)-log(t0+sqrt(1+t0**2))),\
     integr = ($0==0 ? 0.0:integr+dx*(f($1)+lastyr)*0.5), \
     integi = ($0==0 ? 0.0:integi+dx*(g($1)+lastyi)*0.5), \
     lastx=$1, \
     lastyr=f($1), \
     lastyi=g($1),\
     zr=integr+$1*cos($1)*cos(a*(L-s)/L)\
        -$1*sin($1)*sin(a*(L-s)/L),\
     zi=integi+$1*cos($1)*sin(a*(L-s)/L)\
        +$1*sin($1)*cos(a*(L-s)/L),\
     dzx=($0==0 ? 0.0 : zr-old1),\
     dzy=($0==0 ? 0.0 : zi-old2),\
     dL=sqrt(dzx**2+dzy**2),\
     integzr=integzr+(zr+old1)*0.5*dL,\
     integzi=integzi+(zi+old2)*0.5*dL,\
     integL=dL+old3,\
     old1=zr,\
     old2=zi,\
     old3=integL,\
     zr) : (zi) : (integL) : (integzr/L) : (integzi/L)\
     w xyerrorbars

unset table

# グラフ線種の設定
set style line 1 linetype 1
set style line 1 linecolor -1
set style line 1 linewidth 2

set style line 1 linetype 1
set style line 1 linecolor 1
set style line 1 linewidth 1

# x軸y軸の範囲設定
set xrange [-150:150]
set yrange [-150:150]

# x軸y軸のラベル付け
set xlabel "x/a"
set ylabel "y/a"

# グラフ描画
plot "table10.txt" u 2:3 w l linestyle 1 notitle

# 重心座標の描画
replot integzr/L,integzi/L w p title "G(x,y)"

# ヒゲ玉の描画
replot t0* cos(t),t0*sin(t) w l linestyle 2 notitle

# 出力フォーマットとオプションの指定
set terminal jpeg

# 出力ファイル名の指定
set output "jiyuutanhige5.jpeg"

# グラフ再描画
replot

# フォーマットと出力のリセット
set output
set terminal win
[EOF]

プログラムの実行結果は図のようになる。