Jupyter Notebook でのグラフサイズ設定
svg
でインライン表示,グラフのサイズを 640 x 640
に,フォントサイズを 14
に。
%gnuplot inline svg size 640,640 fixed enhanced font ',14'
関数の定義
らせん軌道をあらわす $x, y, z$ は媒介変数表示で
\begin{eqnarray}
x(u) &=& \cos 2\pi u \\
y(u) &=& \sin 2\pi u \\
z(u) &=& \mbox{pitch} \times u
\end{eqnarray}
x(u) = cos(2*pi*u)
y(u) = sin(2*pi*u)
z(u) = pitch*u
pitch = 0.01
オプションの設定例
reset
# 座標軸の目盛を非表示
unset xtics
unset ytics
unset ztics
unset border
# xy 平面の位置
set xyplane 0
# xyz軸の表示
set zeroaxis
# x y の表示範囲
set xrange [-2:2]
set yrange [-2:2]
# グラデーションのカスタム設定
set palette defined (0 "dark-red" , 1 "red" , 2 "light-pink")
unset colorbox
# 媒介変数表示で
set parametric
グラデーション付きのらせんの例
前後関係がわかるように,手前を palette
で濃いめの色(dark-red
),奥を薄目の色(light-pink
)にしている。
# 曲線を滑らかに
set samples 1000
# u の範囲,20 周
u0 = 0
u1 = 20
set urange [u0:u1]
splot '++' using (x(u)):(y(u)):(z(u)):(y(u)) \
w l lw 5 lc palette notitle
urange
の変更による不具合
urange
を少し変えただけなのに,どこが手前なのか,わけわからんグラデーションになってしまうという不具合。
# 曲線を滑らかに
set samples 1000
# u の範囲
u0 = -0.25
u1 = 20.25
set urange [u0:u1]
splot '++' using (x(u)):(y(u)):(z(u)):(y(u)) \
w l lw 5 lc palette notitle
グラデーション不具合の回避例
どうしても urange [-0.25:20.25]
の範囲で正しいグラデーションでらせんを描きたいのであれば,たとえば半周ごとに地道に描き続けるとか…
set samples 50
u0 = -0.25
u1 = u0 + 0.5
# 0.5 周
set urange [u0:u1]
N = 40
splot for [i=0:N]\
'++' using (x(u+i/2.)):(y(u+i/2.)):(z(u+i/2.)):(y(u+i/2.)) \
w l lw 5 lc palette notitle
ソレノイドを流れる電流による磁場
ソレノイドは1本の電線を螺旋状に密に巻いたものである。十分に長いソレノイドを流れる電流により,ソレノイドの内部にのみ,長さ方向に一定の内部磁場ができることがわかる。
ソレノイドの「奥」半分を描く
set samples 50
u0 = 0
u1 = u0 + 0.5
# 0.5 周
set urange [u0:u1]
N = 19
set title "十分に長いソレノイドの内部磁場"
splot for [i=0:N]\
'++' using (x(u+i)):(y(u+i)):(z(u+i)):(y(u+i)) \
w l lw 5 lc palette notitle
内部磁場を描く
replot '++' using (-0.5):(0):(0):(0):(0):(0.2) \
w vec lw 10 lc "green" title "磁場", \
'++' using (0):(0):(0):(0):(0):(0.2) \
w vec lw 10 lc "green" notitle, \
'++' using (0.5):(0):(0):(0):(0):(0.2) \
w vec lw 10 lc "green" notitle
ソレノイドの「手前」半分を描く
replot for [i=0:N]\
'++' using (x(u+i+0.5)):(y(u+i+0.5)):(z(u+i+0.5)):(y(u+i+0.5)) \
w l lw 5 lc palette notitle
最初と最後にちょっと追加
ソレノイドの最初と最後に 0.25 周と電流の矢印を追加。
# 0.25 周用の関数
# [0:0.5] で半周すると見せかけて x<0 は非表示に
xp(u) = (x(u)>=-0.1) ? x(u):1/0
replot \
'++' using (xp(u-0.5)):(y(u-0.5)):(z(u-0.5)):(y(u-0.5)) \
w l lw 5 lc palette notitle, \
'++' using (xp(u+20)):(y(u+20)):(z(u+20)):(y(u+20)) \
w l lw 5 lc palette notitle ,\
'++' using (x(-0.25)-1.5):(y(-0.25)):(z(-0.25)):(1.5):(0):(0):(y(-0.25))\
w vec lw 5 lc palette title "電流", \
'++' using (x(20.25)):(y(20.25)):(z(20.25)):(-1.5):(0):(0):(y(20.25))\
w vec lw 5 lc palette notitle
一様な静磁場中の荷電粒子の運動
電場はないとして,磁場によるローレンツ力を受けた荷電粒子の運動方程式を解くと,一様な静磁場中では,荷電粒子はらせん軌道を描いて運動することがわかる。
set palette defined (0 "dark-blue" , 1 "cyan")
pitch = 0.1
らせん軌道の「奥」半分を描く
set samples 50
u0 = 0
u1 = u0 + 0.5
# 0.5 周
set urange [u0:u1]
N = 4
set title "一様な静磁場中の荷電粒子の運動"
splot for [i=0:N]\
'++' using (x(u+i)):(y(u+i)):(z(u+i)):(y(u+i)) \
w l lw 5 lc palette notitle
一様な静磁場を描く
replot for [i=-2:1] \
'++' u (0.8*i):(0):(0):(0):(0):(0.55) \
w vec lw 10 lc "light-green" notitle ,\
'++' u (1.6):(0):(0):(0):(0):(0.55) \
w vec lw 10 lc "light-green" title "磁場 B"
らせん軌道の「手前」半分を描く
replot for [i=0:N]\
'++' using (x(u+i+0.5)):(y(u+i+0.5)):(z(u+i+0.5)):(y(u+i+0.5)) \
w l lw 5 lc palette notitle
最初と最後にちょっと追加
replot \
'++' using (xp(u+5)):(y(u+5)):(z(u+5)):(y(u+5)) \
w l lw 5 lc palette notitle, \
'++' using (xp(u-0.5)):(y(u-0.5)):(z(u-0.5)):(y(u-0.5)) \
w l lw 5 lc palette title "荷電粒子の軌道" ,\
'++' using (x(5.25)):(y(5.25)):(z(5.25)):(-0.5):(0):(0):(y(5.25))\
w vec lw 5 lc palette notitle