「物理学」カテゴリーアーカイブ

縮約

縮約はアインシュタインが一般相対性理論を説明するために最初に導入した数式のお約束です。
これが考え出されたのはアインシュタインが

和記号を書くのに飽きた

からであると予想されます。
このお約束なんですが,大学の物理科ではあまり触れられない癖に教授たちは常識のように語るので,
身につけておいて損はないですね。

さて,あるテンソル量\(A_{i}\)と\(B_{i}\)があったとしましょう。
この二つの縮約をとるということは,同じテンソル同士の和を取る,という意味になります。
アインシュタインの記法に則れば次のように書きます。

\(
A_{i}B^{i}=\sum_{i}{A_{i}B_{i}}
\)

ようするに同じ添え字が右下と右上に来たら和をとりましょうという約束です。
上の式は内積を表していることがわかります。
これを使うと外積の\(i\)成分も次のようになります。

\(
(A \times B)_i= \epsilon_{i,j,k}A^{j}B^{k}
\)
\(
\epsilon_{i,j,k}= 1 ~~ {\rm at} ~~ i,j,k=(1,2,3),(2,3,1),(3,1,2)
\)
\(
\epsilon_{i,j,k}= -1 ~~ {\rm at} ~~ i,j,k=(1,3,2),(3,2,1),(2,1,3)
\)
\(
\epsilon_{i,j,k}= 0 ~~ {\rm at} ~~ i,j,k=(otherwise)
\)

この\(\epsilon_{i,j,k}\)をレヴィチビタの完全反対称テンソルといいます。

モンテカルロ法

モンテカルロ法は,乱数を使って系の平衡状態にせまる一つの方法です。

ここでは二次元正方格子のイジング模型について紹介します。
イジング模型は隣り合う格子のスピン同士の相関エネルギーのみを考慮した模型です。
ハミルトニアンは以下のようになります。

\(
\displaystyle
H=-J \Sigma_{< i , j >}{s_{i}s_{j}}
\)
 
あるスピン状態を持つ系の状態Aについて,そのハミルトニアンを\(H_A\)とすると,
ボルツマン因子と分配関数\(Z\)を用いて状態の実現確率を計算することが出来ます。

\(
P(A)=\frac{\exp{(-\frac{H_A}{k_B T})}}{Z}
\)
 
Aからランダムに一つの格子におけるスピンを一つだけフリップした状態を状態Bとして,
状態Aと状態Bの実現確率比を乱数と比較します。
\(P(B)/P(A)>{\rm random}\)ならば状態Bを採用し,そうでなければ状態Aを採用します。
ここまでの流れを1mcs(モンテカルロステップ)といい,これを何度も繰り返すことで平衡状態に近づきます。
以下の二つのgifは,相転移温度より高い温度と低い温度で,
モンテカルロステップにより二次元正方格子のスピンがどのように振る舞うかをみているアニメーションです。
黒がダウンスピン,白がアップスピンです。


温度T=10eVのスピンの挙動
温度T=10eVのスピンの挙動

こちらは温度T=10eVで,自発磁化を持たない事が分かります。


温度T=0.001eVのスピンの挙動
温度T=0.001eVのスピンの挙動

こちらは温度T=0.001eVで,スピンが揃って自発磁化を持つ事が分かります。

画像をクリックするとmcsスタート!!

スピンのふるまいを追うと,自発磁化を持つ温度と持たない温度でスピンのふるまいが違う事が分かります。
二次元のイジング模型はオンサーガーにより厳密に解かれている(相転移温度T=2.26eV at J=1)ので,
それを踏まえて下のプログラムで遊んでみるといいですよ。

これのプログラムソースコード(保証は一切しません!!)
*注意 このプログラムを実行する前にising_anというディレクトリを作ってください。
*追記 2015 2/13 磁化とエネルギーを計算出来るようにしました。
計算方法は重み付き選択法というのを使ってます。

\(
\langle A \rangle = \frac{1}{T} \sum_{t=t_0+1}^{t_0 + T}A_{\alpha_{t}}
\)
 
十分平衡状態になっている\(t_0\)以降のモンテカルロステップで,物理量の統計平均を取る方法です。
平衡以前の物理量を計算しないmcsをからまわしと言います。

格子点51×51で,\(J=2\)で計算しました。
スピンの大きさを1として,相互作用をダブルカウントしているので注意しましょう。
即ち\(J=1\)の結果が欲しければプログラム上ではintJ=0.125にすればよいかも。

**********parameter**********
i_max::x方向の格子点の数
j_max::y方向の格子点の数
mcs_max::最大モンテカルロステップ数
mcs2step::mcs2step以降のmcsを平衡状態と見なし,物理量を計算します
intj::\(J/4\)
temp::温度
mov_max::mcs_max/movmax毎のスピン状態をgifアニメーションで見れるように区切ります。
**********parameter**********

単位格子あたりのエネルギーの温度依存性グラフを添付します。

ene

相転移温度付近でエネルギーの変化が大きい事が分かります。

単位格子あたりの磁化の絶対値の温度依存性グラフを添付します。

mag

相転移温度付近で自発磁化が発生し始めている事が分かります。

gnuplotを用いて,格子点上のスピンがどのように平衡状態へ近づくかをダイナミックに確認する事が出来ます。

gnuplot anime.gnuplot
 
を実行するとアニメが始まります。

gnuplot animegif.gnuplot
 
でgifアニメが作成出来ます。

!————————————————
! title = ising2d.f90
! developer = Amesyabody
! released = 2015 2/13
! programming language = fortran
!
!explanation
!2 dimentional square lattice Ising model's dynamical magnetism
!calculated by Monte Carlo method.
!————————————————
   
program main
    implicit none
    integer(4)::i,j,i_max,j_max,mcs,mcs_max,mov,mov_max,mcs2step
    parameter(i_max=50,j_max=50,mcs_max=1000000,&
    mcs2step=500000,mov_max=100)
    real(8)::intj,temp
    parameter(intj=0.25d0,temp=0.1d0)
    real(8)::spin(0:i_max,0:j_max)
    real(8)::ratio,ham1,ham2,hamres,dum,ene
    integer(4)::px,mx,py,my,rndx,rndy
    character(10)::movc,movc2

    real(8)::mag,mag2,magres
   
    !-----make random-----
    integer(4),allocatable::seed(:)
    integer cnt,seedsize
    real(8)::rnd,rndi,rndj,rnds
   
    call random_seed(size=seedsize)
    allocate(seed(seedsize))
    write(*,*)seedsize

    dum=rndmf(0)

    call system_clock(count=cnt)
    seed=cnt!+idnint(dum*1000000)
!            dum=rndmf(seed(0))
!            seed=idnint(seed*dum)
    call random_seed(put=seed)

    !------------------

mag2=0.0d0
ene=0.0d0

do mov=0,mov_max

write(movc,'(i3)')mov

open(100+mov,file="ising_an/spin"//trim(adjustl(movc))//".dat"&
,status="unknown")

end do

open(5000,file="ising_an/anime.gnuplot",status="unknown")
open(5001,file="ising_an/animegif.gnuplot",status="unknown")

    !-----primitive spin set-----
   
    do i=0,i_max
        do j=0,j_max
            call random_number(rnd)
!           write(*,*)rnd
            if(rnd>0.5d0)then
                spin(i,j)=1.0d0
            else
                spin(i,j)=-1.0d0
            end if
!           write(*,*)spin(i,j)!,cnt,seed(1)

        write(100,'(i3,i3,f5.1)')i,j,spin(i,j)

        end do

        write(100,*)" "

    end do
   
    !----------------------------
   
    do mcs=1,mcs_max
   
        do i=0,i_max
       
            do j=0,j_max
           
                px=i+1
                if(i==i_max)px=px-i_max-1
                py=j+1
                if(j==j_max)py=py-j_max-1
                mx=i-1
                if(i==0)mx=mx+i_max+1
                my=j-1
                if(j==0)my=my+j_max+1

                ham1=ham1-intj*spin(i,j)*spin(px,j)&
                -intj*spin(i,j)*spin(i,py)&
                -intj*spin(mx,j)*spin(i,j)&
                -intj*spin(i,my)*spin(i,j)

                do mov=1,mov_max-1

                    if(mcs==mov*mcs_max/mov_max)&
                    write(100+mov,'(i3,i3,f5.1)')i,j,spin(i,j)

                end do

                if(mcs>mcs2step)then

                    mag2=mag2+spin(i,j)

                end if
               
            end do

            do mov=1,mov_max-1

                if(mcs==mov*mcs_max/mov_max)write(100+mov,*)" "

            end do

        end do

        if(mcs>mcs2step)then

            magres=magres+abs(mag2)
            mag2=0.0d0
            ene=ene+ham1

        end if

        call random_number(rndi)
        call random_number(rndj)
        rndx=idnint(rndi*i_max)
        rndy=idnint(rndj*j_max)

!       write(*,*)rnd
!write(*,*)spin(rndx,rndy)
        spin(rndx,rndy)=-spin(rndx,rndy)
!write(*,*)spin(rndx,rndy)
        do i=0,i_max
       
            do j=0,j_max
           
                px=i+1
                if(i==i_max)px=px-i_max-1
                py=j+1
                if(j==j_max)py=py-j_max-1

                mx=i-1
                if(i==0)mx=mx+i_max+1
                my=j-1
                if(j==0)my=my+j_max+1

                ham2=ham2-intj*spin(i,j)*spin(px,j)&
                -intj*spin(i,j)*spin(i,py)&
                -intj*spin(mx,j)*spin(i,j)&
                -intj*spin(i,my)*spin(i,j)
   
            end do
           
        end do
       
        ratio=exp((-ham2+ham1)/temp)
!       write(*,*)ham1,ham2,ratio
       
        ham1=0.0d0
        ham2=0.0d0
       
        call random_number(rnds)

        if(ham1 > ham2)then!metroporis
        goto 200
        end if
       
        if(rnds>ratio)then
        spin(rndx,rndy)=-spin(rndx,rndy)
        end if

200     continue

    end do
   
    do i=0,i_max
        do j=0,j_max
       
        mag=mag+spin(i,j)
       
        px=i+1
        if(i==i_max)px=px-i_max-1
        py=j+1
        if(j==j_max)py=py-j_max-1
        mx=i-1
        if(i==0)mx=mx+i_max+1
        my=j-1
        if(j==0)my=my+j_max+1

        hamres=hamres-intj*spin(i,j)*spin(px,j)&
        -intj*spin(i,j)*spin(i,py)&
        -intj*spin(mx,j)*spin(i,j)&
        -intj*spin(i,my)*spin(i,j)

        write(100+mov_max,'(i3,i3,f5.1)')i,j,spin(i,j)
       
        end do

        write(100+mov_max,*)" "

    end do
   
    mag=mag/(dble(i_max*j_max))
   
!   write(*,'(3f10.5,f15.5)')temp,intj,mag,hamres

    ene=ene/(dble((mcs_max-mcs2step)*(i_max+1)*(j_max+1)))
    magres=magres/(dble((mcs_max-mcs2step)*(i_max+1)*(j_max+1)))

    write(*,'(A,f10.5,A,f10.5)')"energy=",ene,"      magnet=",magres

    write(5000,*)"set size sq"
    write(5000,*)"set pm3d map"
    write(5000,*)"set palette rgbformulae 21,22,23"
    write(5000,*)"set xlabel 'x'"
    write(5000,*)"set ylabel 'y'"
    write(5000,*)"set zra[-1:1]"
    write(5000,*)"set zlabel 'spin'"
    write(5000,*)"splot 'spin0.dat'"
    write(5000,*)"pause 0.1"
    do mov=1,mov_max
    write(movc,'(i3)')mov
    write(5000,*)"splot 'spin"//trim(adjustl(movc))//".dat'"
    write(5000,*)"pause 0.1"

    end do

    write(5001,*)"set tics font 'Times,15'"
    write(5001,*)"set xlabel font 'Times,15'"
    write(5001,*)"set ylabel font 'Times,15'"
    write(5001,*)"set size sq"
    write(5001,*)"set pm3d map"
    write(5001,*)"set palette rgbformulae 21,22,23"
    write(5001,*)"set xlabel 'x'"
    write(5001,*)"set ylabel 'y'"
    write(5001,*)"set zra[-1:1]"
    write(5001,*)"set cbrange [-1:1]"
    write(5001,*)"set zlabel 'spin'"
    write(5001,*)"set term gif animate optimize"
    write(5001,*)"set output 'is_t10.gif'"
    write(5001,*)"do for[i=0:100] {"
    write(5001,*)'file = sprintf("spin%01d.dat", i)'
    write(movc2,'(i10)')mcs_max/mov_max
    write(5001,*)'time = sprintf("s=%d[mcs]",i*'//trim(adjustl(movc2))//')'
    write(5001,*)"set title time"
    write(5001,*)"splot file"
    write(5001,*)"}"

    contains

real(8) function rndmf(seeds)
implicit none

integer(4)::a,m,q,p,n,ndiv,j,k,seeds
real(8)::rm,rmax
parameter(a=16807,m=2147483647,rm=1.0/m)
parameter(q=127773,p=2836,n=32,ndiv=1+(m-1)/n)
parameter(rmax=1.0-1.2e-7)
integer(4)r(n),r0,r1

if (seeds .ne. 0)then
r1=abs(seeds)
do j=n+8,1,-1
k=r1/q
r1=a*(r1-k*q)-p*k
if(r1 .lt. 0)r1=r1+m
if(j .le. n)r(j)=r1
end do
r0=r(1)
end if


k=r1/q
r1=a*(r1-k*q) -p*k
if(r1 .lt. 0)r1=r1+m
j=1+r0/ndiv
r0=r(j)
r(j)=r1
rndmf=min(rm*r0,rmax)

end function
   
end program

弾道計算(BB弾)の理論

エアガンから発射したBB弾がどのように飛んでいくか?
BB弾の弾道計算理論パートです。

完全な計算のためには圧縮ナビエ・ストークス方程式を解いて…ということをしなければなりませんが、そこまでは考えません。
射出後のBB弾がどのような軌道を描き進むのか、ニュートンの運動方程式の範囲で考えていき,定量的な一致を目標にしていきます。

結果として得られる運動方程式は以下の2つです。
・BB弾の運動方程式
\(
\displaystyle m\frac{d^2 \vec{r}}{dt^2}=
-mg\vec{k}-\frac{1}{2}C_d \rho \pi R^2 |\vec{V}|\vec{V}
-C_l \frac{4}{3}\pi R^3 2\rho |\vec{\omega}| |\vec{V}|\frac{\vec{V}\times\vec{\omega}}{|\vec{V}\times\vec{\omega}|}
\)

・BB弾の回転角速度の減衰を記述する方程式
\(
\begin{align}
\frac{d\omega_z}{dt}&=N_z/I \\
N_z&=\frac{\rho C_f}{2}R^3\int_0^{2\pi}d\varphi\int_0^{\pi}d\theta |u\sin\varphi-R\omega\sin\theta|(u\sin\varphi-R\omega\sin\theta)\sin^2\theta
\end{align}
\)

の二つにより構成されます。

実験データから、\(C_l=0.12\)で良く記述できることが分かりました。
詳細はBB弾の回転量について(実験との比較)をご覧ください。

結論を言うと、サバゲーで勝ちたければ、重いBB弾を使うべきです。
飛距離を伸ばすためには
BB弾の重さ、銃口から出てくるときの初速回転数以外に飛距離を伸ばすことに関係する変数はありません。
0.20,0.25gの違いと回転減衰
※初速と共に載せました。この初速の値は実験データがあるサイトと同じ値にしています。

追記)2019年6月20日
空気抵抗を1%程多めに見積もっていました。結果はそんなに変わらないと思いますが、記述しておきます。式は訂正しましたが、グラフは訂正していない時の計算式に従っています。時間がある時に修正いたしますので、ご了承下さい。

追記)2021年8月11日
グラフなどを修正しました。

目次

  1. 先行研究の紹介
  2. BB弾に働く力
  3. BB弾の運動方程式
  4. 結果
  5. 流体中に置かれた球体の回転の減衰
  6. 参考文献

弾道計算に関するその他ページ
弾道計算(BB弾)の理論←今ここ
BB弾の回転量について(実験との比較)
弾道計算(BB弾)の結果
弾道計算の結果2, 比較と詳細データ
弾道計算(BB弾)のコード(fortran90)
弾道計算のコード(Excel)
バレル内部でのBB弾の方程式
水中下でのBB弾の弾道計算

先行研究の紹介


誰かやっているかなーっと調べてみると、やっぱりやってる人がいました。

解析解(慣性抵抗とマグヌス力を考慮?)を用いての、定性的な一致に終わっています。
BB弾の弾道計算まとめ -チン太さんのノート(2013年)
(※2016/01/16 正しさの確認がとれないので一応の解析解、ということにしておきます。なぜなら、2次元の空気抵抗を考慮した微分方程式でさえ解析解が存在しないはずだからです[12]。)

本稿では可能な限りの影響を考慮し、定量的に一致させることを目標にしていきます。

BB弾に働く力


質量mのBB弾の場合、運動方程式は言葉で書けば、
\(
\displaystyle m\frac{d^2 \vec{r}}{dt^2}=(\mbox{重力})+(\mbox{風の抵抗力})+(\mbox{回転による揚力})
\)

で十分だと思います。

また、角速度ベクトルの歳差運動はあるかもしれませんが、見積もる方法が分からなかったため考慮していません。

追記)
各々の力の大きさを簡単に計算してみました。BB弾の速さを100m/s, 重さ0.2g, 166回転/sと仮定

重力: \(1.96\times 10^{-3}\)

慣性抵抗力: \(8.52\times 10^{-2}\)
Magnus力: \(1.71\times 10^{-3}\)
コリオリ力(最大): \(2m|\vec{\omega_{earth}}||\vec{v}|=2.8\times 10^{-6}\)

であるため、コリオリ力はほとんど無視できるんじゃないでしょうか。

重力\(F_g\)


場所による重力加速度の違いはあるかもしれませんが、無視できるでしょう。
なので重力\(F_g\)の大きさは
\(F_g=mg\)
でしょう。ここで

  • \(m\ \mathrm{[kg]}\) : 物体の質量
  • \(g\ \mathrm{[m\cdot s^{-2}]}\) : 重力加速度

です。

風の抵抗力\(F_d\)


空気抵抗と呼ばれているものです。
空気抵抗を計算するには物体の形状が分からなければ求めることはできません。
速度に比例する項は理論的に求めることができますが、速度の2乗に比例する空気抵抗の係数(抗力係数)はレイノルズ数の関数となります。

ここでは、半径\(R\)の完全な球体に働く空気抵抗を求め、それを導出、計算します。

風(流体)の抵抗力の大きさ\(F_d\)は一般には次元解析により
\(
\displaystyle F_d=\frac{\eta^2}{\rho}\sum_{n=1}^{\infty}K_n \left(\frac{v \rho L}{\eta}\right)^n
\)

として与えられます[1]。ここで

  • \(\eta\ \mathrm{[kg \cdot m^{-1}\cdot s^{-1}]}\) : 流体の粘性率(Viscosity) ※動粘度ではないです。
  • \(\rho\ \mathrm{[kg \cdot m^{-3}]}\) : 流体の密度
  • \(v\ \mathrm{[m\cdot s^{-1}]}\) : 物体の速度の大きさ
  • \(L\ \mathrm{[m]}\) : 物体の大きさ(半径\(R\)の球の場合、\(L\)は直径\(L=2R\)に相当する量)
  • \(\frac{v \rho L}{\eta}\) : レイノルズ数(\(R_e\),Reynolds number)と呼ばれる無次元量

です。次元解析から具体的な定数の値\(K_n\)を求めることはできません。
通常の場合はn=1(粘性抵抗)とn=2(慣性抵抗)のみ考慮されます。
速度の3乗以上に比例する項というのは見かけません。
おそらく、これから説明する抗力係数\(C_d\)にその効果を全部押し込めているためでしょう。

上の式を速度の関数\(C_d\)を用いて
\(F_d=C_d S \left(\frac{1}{2}\rho v^2\right)\)
と書きます。ここでSは速度に垂直な、物体の断面積です。
今、\(n=2\)以外の項を全て\(C_d\)の中に入れました。

\(C_d\)は抗力係数(Drag Coefficient)と呼ばれ、
これはレイノルズ数の関数となり、
\(C_d=C_d(R_e)\)
となります。
この抗力係数は非常に厄介らしいです。物体の形状に依存したりするらしく、球の場合でも、どうやら実験的に求められているようです。
Wikipediaの抗力係数のページに若干の記述があります。
球の場合の抗力係数の関数\(C_d(R_e)\)をフィッティングした関数は論文[2]より、
\(
\displaystyle C_d=\frac{24}{R_e}+\frac{2.6\left(\frac{R_e}{5.0}\right)}{1+\left(\frac{R_e}{5.0}\right)^{1.52}}
+ \frac{0.411\left(\frac{R_e}{263000}\right)^{-7.94}}{1+\left(\frac{R_e}{263000}\right)^{-8.00}} + \left(\frac{R_e^{0.80}}{461000}\right)
\)

として書けるそうです。実際にプロットしてみるとこんな感じです。
Cdグラフ
確かに抗力係数のグラフと同じようになります。

よって半径Rの球の場合、風の抵抗力\(F_d\)の大きさは結局、
\(
\begin{align}
F_d &= C_d S \left(\frac{1}{2}\rho v^2\right) \\
&= \frac{1}{2} C_d \rho \pi R^2 v^2
\end{align}
\)
として与えられます。

※BB弾をエアガンから、無風状態で発射する場合、抵抗は


風の抵抗力: \(8.52\times 10^{-6}|\vec{v}|^2\)

となります。ここでいう風の抵抗力は、粘性抵抗と慣性抵抗を含んだものです。

回転による揚力\(F_L\)


回転による揚力の発生はマグヌス効果(Magnus effect)と呼ばれています。
空気力学で、回転する円柱の揚力に関する理論クッタ・ジュコーフスキーの定理(Kutta–Joukowski theorem)によって回転による揚力は記述されます。
発生する揚力\(F_L\)の大きさは
\(
F_L=\rho \Gamma v
\)

と書けます[3]。ここで

  • \(\rho\ \mathrm{[kg \cdot m^{-3}]}\) : 流体の密度
  • \(v\ \mathrm{[m\cdot s^{-1}]}\) : 物体の速度の大きさ
  • \(\Gamma\ \mathrm{[m^2\cdot s^{-1}]}\) : 循環

を意味します。循環\(\Gamma\)は
\(
\displaystyle \Gamma=\oint_s \vec{v}\cdot d\vec{s}
\)

という量です。
ここで、\(\oint\)は球体の外側での閉経路に対する線積分であり、球体そのものの循環ではありません[9]。

私は流体力学は良く知らないで余り突っ込まないでおきますが、簡単に仮定します。
実際に発生する循環\(\Gamma\)を無次元の係数\(C_l\)と球体の循環\(\Gamma^{sp}\)を用いて、
\(
\Gamma=C_l\Gamma^{sp}
\)

で書ける、とします。
(実際には迎え角なども関係するようなのでこれは厳密には正しくはありませんが、定性的に説明するので良いでしょう、という仮定しているだけにすぎません。)

球の循環を考えます。
半径\(R\mathrm{[m]}\)の角速度\(\omega\mathrm{[s^{-1}]}\)を持つ円盤に対して循環\(\Gamma^{ci}\)を計算すると、
\(
\begin{align}
\Gamma^{ci} &= \oint_s \vec{v}\cdot d\vec{s} \\
&= \int_0^{2\pi}R\omega\cdot Rd\theta \\
&= 2\pi R^2 \omega
\end{align}
\)
と計算できます。しかし、これから考えるのは球です。
半径\(r\)の円盤に対して循環は、\(\Gamma^{ci}=\Gamma^{ci}(r)=2\pi r^2 \omega\)と書くことができるので、積分して球の循環\(\Gamma^{sp}\)が求められます。
球に対する循環の計算
図のように考えれば、計算は、
\(
\begin{align}
\Gamma^{sp} &= \int_{-R}^{R} \Gamma(r) dl \\
\end{align}
\)

です。\(l=R\cos\phi, \ \ r=R\sin{\phi}\)の変数変換を行って計算すると、
\(
\begin{align}
\Gamma^{sp} &= \int_{-R}^{R} \Gamma(r) dl \\
&= 2\pi \omega R^3 \int_0^\pi \sin^3\phi d\phi \\
&= \frac{4}{3}\pi R^3 \cdot 2\omega
\end{align}
\)
と求められるため、揚力\(F_L\)は無次元の係数\(C_l\)を用いて
\(
\begin{align}
F_L &= C_l \rho \Gamma^{sp} v \\
&= C_l \frac{4}{3}\pi R^3 2\omega \rho v
\end{align}
\)
と書き表せるとします。

2016/07/09 追)
係数\(C_l\)は実験[11]とその弾道データより、
\(
C_l=0.12
\)

で良く近似される、という事が分かりました。詳しくは
BB弾の回転量について(実験との比較)
をご覧ください。

BB弾の運動方程式


重力\(F_g\), 空気抵抗\(F_d\)と回転による揚力\(F_L\)を取り入れたBB弾に対する運動方程式は方向も考慮に入れて、
\(
\displaystyle m\frac{d^2 \vec{r}}{dt^2}=
-mg\vec{k}
-\frac{1}{2}C_d \rho \pi R^2 |\vec{v}|\vec{v}
-C_l\frac{4}{3}\pi R^3 2\rho |\vec{\omega}| |\vec{v}|\frac{\vec{v}\times\vec{\omega}}{|\vec{v}\times\vec{\omega}|}
\)

と書けます。上の式の場合、風速の影響は入っていません。
風速の影響を取り入れるのは風と共に動く座標系で考えてから元の座標系に戻ればいいです。
すなわち、地表に固定した座標に対して風の速度ベクトル(定ベクトル)を\(\vec{u}\), 物体の速度ベクトルを\(\vec{v}(=d\vec{r}/dt)\), とし、
相対的な速度ベクトルを\(\vec{V}=\vec{v}-\vec{u}\)と定義すると、風がある中での運動方程式は、
\(
\displaystyle m\frac{d^2 \vec{r}}{dt^2}=
-mg\vec{k}+-\frac{1}{2}C_d \rho \pi R^2 |\vec{V}|\vec{V}
-C_l\frac{4}{3}\pi R^3 2\rho |\vec{\omega}| |\vec{V}|\frac{\vec{V}\times\vec{\omega}}{|\vec{V}\times\vec{\omega}|}
\)

と書けます。

それぞれの定数の具体的な値を考えます。

各定数の値
名称 記号 捕捉
重力加速度\(g\) \(9.80665\mathrm{[m\cdot s^{-2}]}\)
空気の粘性率(Viscosity)\(\eta\) \(18.2\times 10^{-6}\mathrm{[kg \cdot m^{-1}\cdot s^{-1}]}\) 空気中20度において。また、粘性率は数十気圧から数気圧の間圧力には依存しません。
が、温度に依存し、ある温度\(T_1[K]\)での粘性率\(\eta_1\)が分かっているならば、
温度\(T_2[K]\)での粘性率\(\eta_2\)はサザランドの定数Cを用いて、
\(
\eta_2=\eta_1 \left(\frac{T_1[K]+C}{T_2[K]+C}\right)\left(\frac{T_2[K]}{T_1[K]}\right)^{3/2}
\)
と記述されます。空気の場合、C=117です[4]。
乾燥した空気の密度\(\rho\) \(1.205\mathrm{[kg \cdot m^{-3}]}\) 乾燥した空気の密度は温度と圧力に依存します。温度\(t[℃]\)、圧力をH[torr]とすると
\(
\rho=\frac{1.293}{1+0.00367t[℃]}\cdot \frac{H[torr]}{760}
\)
です[5]。
BB弾の半径\(R\) \(3.0\times 10^{-3}\mathrm{[m]}\)

数値計算は刻み幅制御ルンゲ・クッタ法を用います。
コードはこちら→弾道計算(BB弾)のコード

[adsense1]

結果


結果をまとめます。

回転数と飛距離依存性

撃ちだしの角度を地面と水平にして、同じエネルギー(0.90J)で撃ち出した場合の回転数による飛距離の変化を見てみましょう。

図の横軸は進行方向の距離、縦軸は高さを表し、グラフの色『rot XXX』は、XXX回転/秒を表します。
重たい0.25gの方が、回転数が変化しても軌道が変わりにくいことが分かります。
つまり、0.25gの方がいつも安定して飛ばせる、一発ごとにぶれが少ないということが分かります。

理想的な弾道の軌跡

BB弾の回転数が程よく遠くに飛ぶのは、0.20gで240回転/秒、0.25gで280回転/秒くらいがよさそうな軌道と考えます。
この時、打つ際に若干、下方向に向けて打つことでまっすぐ飛ぶ領域を増やせそうです。どのくらい下向きに打てばいいんでしょうか。その結果がこれです。

図の横軸は進行方向の距離、縦軸は高さを表し、グラフの色『XXX deg』は、進行方向下向きに角度XXX度で射出したことを表します。

この結果から、一つの最適な軌道を与えるのは0.20gで回転数240回転/秒かつ角度0.8°,0.25gで回転数280回転/秒かつ角度0.6° で射出した時でしょう。その時の上下方向のブレは35m位飛んで10cmくらいであることが分かります。

また、一つ言えるのは一番良い軌道は角度\(\theta\)を変化させたときに上下方向のブレが少ないとき、と言えると思います。
なのでこの値が厳密な最適ではないです。ですが、今まで、最適ホップと言われるような曖昧な定義ではなく、最適な良い軌道の定義について指針ができそうです。

BB弾の重さ0.20gと0.25gの違い

さて、BB弾の重さによって弾道が変わる様子を調べてみましょう。余計な要因をなくすために、回転なし、風なし、同じエネルギー(0.90J)で射出した場合で比較しましょう。

まずは着弾する際の速度についてです。

左図中の横軸は時間、縦軸は球の速さを表し、黒(赤)色は0.20g(0.25g)の場合です。
右図は左図と同じですが、軸の範囲を変更して交差する付近を拡大しています。

0.25gの方が着弾までの速度変化が少ないことが分かります。
つまり、空気の影響を受けにくいことを示します。これは、球が重いほうが風の抵抗力があたかも小さくなるからです。

続いて、着弾までの時間についてです

左図中の横軸は時間、縦軸は球の進行方向の距離を表し、黒(赤)色は0.20g(0.25g)の場合です。
右図は左図と同じですが、軸の範囲を変更して交差する付近を拡大しています。

着弾までに早いということは、着弾までのずれがなく、撃った時と着弾までのラグがないということです。
具体的に、到達するまでの時間を見ると30[m]まで0.20gのBB弾のほうが早く到達するようですね。
ですが、その差は0.01秒程度ですので、そんなに実感はできないかと思います。

重さと風の影響

良い軌道と決めたパラメータ(0.20gで240回転/秒, 0.25gは280回転/秒として計算をしています。エネルギーは0.9Jのエネルギーを持つようにしています。

0.2gと0.25gの違いと風の影響は余りなさそうな気がします。例えば30[m]地点ではどちらも5[m/s]の風が吹いていたとしても1.0~1.3[m]のずれに収まっています。
この30cmが問題になるのかは…状況次第ですね。

横向きに打ち出した時の曲がり具合

横向き射出2
意外と曲がらないものですね。大体2[m]です。
理由は、この計算では打ち出す時は銃を完全にまっすぐにして固定した状態なのでMagnus力の影響が0から段々と強くなります。
Magnus力の強さは回転軸に垂直の速度成分が速いほど加速度的に増えていくものなので、はじめ銃を曲がる方向に向けて撃てば
曲がる方向の初速度+更なるMagnus力でもっと曲がります。
なので物陰にいる敵を倒す(褒められた方法ではないですが)場合は若干敵の方向へ向けて回転による効果を得られるようにしましょう。

銃を逆さまにして上から狙う

上から落として狙う
じゃあ銃を逆さまにして上向きに撃てば障害物の上から狙えるんじゃ・・・?
適正なホップ(m=0.20[g],20回転)の場合、2[m]位の障害物があれば上の黄色Θ=0.64°の軌道でよさそうです。
しかし、障害物を超えて1m落下するのに5[m]位離れてしまいます。なので、敵が障害物から5[m]程度離れている時に撃てば当てられますね。

2015/4/28 追)

実際の弾道のデータとの比較

BB弾の実際の飛距離をデータとして掲載しているページを見つけました。ここです↓
東京マルイ G36CにおけるノーマルホップとG-HOPの弾道特性
測定は大変なものなので緻密なデータとはいきませんが、大体の傾向と、この計算がどのくらいよいものなのか、はわかりそうです。
BB弾の回転数は上のページを参考にし、最大到達点を目安に決定しました。
0.2gのデータは良いデータではなさそうだったのであきらめ、0.25gの結果のみで弾道の軌道を比較しましょう。
数値計算では無風状態でBB弾の重さ0.25g, 初速75m/s,高さ1.1mから射出します。
回転数はおおよそ343回転の時、最高到達点が2.4[m]程度と数値計算によって分かったためそれを使います。その時のデータは以下のようになりました。

比較対象は黒色の線です。割と良い一致をしています。
原因を考察します。どの程度の統計性があるかは分かりませんが、写真を見る限り、数十発程度の平均値であろうと予想できます。
なので、毎回50m地点で向かい風が吹いて失速し、それが数値計算とのずれだ、などという状況は考えにくそうです。
一番考えられるのはBB弾の回転角速度の減衰でしょう。次の節で取り扱います。

そのほか、この計算に一致しない理由としては、温度による粘性抵抗のずれ、
若干の向かい風がある(計算よりも早くホップにより上昇しているため)、横方向の考慮、測定ミスetc…上げればきりがありません。
しかし、おおよその傾向は良いです。ホップが効いて下がり始めるまではほとんど同じ軌跡を辿っています。

ちなみに、地面に着弾するまでの時間は計算上では2.3秒程度でした。

追)2015/05/31

流体中に置かれた球体の回転の減衰

流体中に板を置けば、板は流体から力を受け、引きずられるはずです。
回転をしているのなら、回転方向とは反対の向きに力のモーメントを受け、回転が減衰するはずです。


最終的に、最初に角運動量がz軸方向の成分しかない場合、角速度の時間変化\(\frac{d\omega_z}{dt}\)は、
\(
\begin{align}
\frac{d\omega_z}{dt}&=N_z/I \\
N_z&=\frac{\rho C_f}{2}R^3\int_0^{2\pi}d\varphi\int_0^{\pi}d\theta |u\sin\varphi-R\omega\sin\theta|(u\sin\varphi-R\omega\sin\theta)\sin^2\theta
\end{align}
\)
と求められます。(ここで\(I\)は慣性モーメント、\(C_f\)は摩擦抗力係数、\(u\)は物体の、風との相対速度を表します。)
これを計算し、BB弾の角速度に反映させます。

ここから自信が無いので、あっているか、物理の背景が正しいかは保証できません。
まず、回転を記述する運動方程式は、
\(
\displaystyle \frac{d\vec{L}}{dt}=\vec{N}
\)

慣性モーメント\(I\)を用いると、\(\vec{L}=I\vec{\omega}\)であるため、
\(
\begin{align}
I\frac{d\vec{\omega}}{dt}&=\vec{N} \\
I\frac{d^2\vec{\theta}}{dt^2}&=\vec{N}
\end{align}
\)
ここで\(\frac{d\vec{\theta}}{dt}=\vec{\omega}\)と置いています。

求めるべきは右辺の力のモーメント\(\vec{N}\)です。

摩擦抗力\(D_f\)、摩擦抗力係数\(C_f\)というものがありました[6,7,10]。
境界層流れ、という分野に分類されるそうです。
流れている流体に対して摩擦によって平板に生まれる、摩擦抗力\(D_f\)は
\(
\displaystyle D_f=-C_f\frac{\rho U^2}{2}S_{contact}
\)

と記述でき、\(C_f\)は摩擦抗力係数、\(\rho\mathrm{[kg\cdot m^{-3}]}\)は流体の密度、
\(U\mathrm{[m\cdot s^{-1}]}\)は流体との相対速度、\(S_{contact}\)は流体と物体の接触面積を記述しています。
\(C_f\)はレイノルズ数\(R_e\)の関数であり、
層流領域(\(R_e\lt 5\times 10^5 \sim 10^6\))では[10]
\(
\displaystyle C_f=\frac{1.328}{\sqrt{R_e}}
\)
乱流領域(\(5\times 10^{5}\lt R_e \lt 5\times 10^6\))では[6]
\(
\displaystyle C_f=\frac{0.074}{{R_e}^{1/5}}
\)
乱流領域(\(10^{7}\lt R_e\))では[6]
\(
\displaystyle C_f=\frac{0.455}{(\log_{10}{R_e})^{2.58}}
\)

を用いるのが推奨されるようです。
専門家ではないのでこれらの係数の導出等々は知りません。
エアガンの場合、レイノルズ数はおおよそ\(3\times 10^{4}\)程度なので層流領域だと見積もられます。

この摩擦抗力を元に、空気抵抗によって回転が減衰することを調べてみましょう。
ただし、ここでは2つの仮定をします。

  1. 風は角度\(\varphi, (0\le\varphi\lt 2\pi)\)のみに依存する
  2. 位置\(\vec{r}\)で速度\(\vec{v}(\vec{r})\)を持つとき、その微小面積\(\Delta S\)に働く摩擦抗力\(\Delta D_\vec{f}\)を
    \(\displaystyle \Delta D_\vec{f}=-\frac{\rho C_f}{2}|\vec{v}(\vec{r})|^2\frac{\vec{v}(\vec{r})}{|\vec{v}(\vec{r})|}\Delta S\)
    と仮定

これらの仮定の下、話を進めます。
微小区間に働く力のモーメント\(\Delta\vec{N}=\vec{r}\times \Delta\vec{f}\)を考えてから、全空間で積分を行います。
そのために位置\(\vec{r}\)の点における速度\(\vec{v}\)を導出します。
減衰_回転と風_c
摩擦抗力は相対速度\(\vec{v}\)によって記述されると考えられるので、回転によって生じる速度\(\vec{v}_{rot}\)とその地点での風の速度\(\vec{v}_{win}\)を使えば、
\(
\vec{v}=\vec{v}_{win}-\vec{v}_{rot}
\)

と書くことができます。
まず、\(\vec{v}_{rot}\)は、
\(
\vec{v}_{rot}=\vec{r}\times \vec{\omega}
\)

と表現されます。また、\(\vec{v}_{win}\)は、
\(
\vec{v}_{win}=(\vec{u}\cdot \vec{e}_{\varphi})\vec{e}_{\varphi}
\)

であると考えられます(仮定①)。ここで\(\vec{e}_{\varphi}\)は回転方向の単位ベクトルを表します。
よって、位置\(\vec{r}\)の相対速度\(\vec{v}\)は、
\(
\vec{v}=(\vec{u}\cdot \vec{e}_{\varphi})\vec{e}_{\varphi}-(\vec{r}\times \vec{\omega})
\)

となります。
微小区間に働く力のモーメント\(\Delta\vec{N}\)は、
\(
\begin{align}
\Delta\vec{N}&=\vec{r}\times \Delta\vec{f} \\
&=-\vec{r}\times\left(\frac{\rho C_f}{2}|\vec{v}|^2\frac{\vec{v}}{|\vec{v}|}\Delta S\right) \\
&=-\frac{\rho C_f}{2}|\vec{v}|(\vec{r}\times\vec{v})\Delta S
\end{align}
\)
と書かれます(仮定②を使用)。
今、3次元極座標を考えて積分すると位置\(R\)での微小面積はヤコビアンより、\(R^2\sin(\theta)d\varphi d\theta\)なので、
(動径方向は\(r=R\)のみ)、
\(
\displaystyle \vec{N}=-\frac{\rho C_f}{2}R^2 \int_0^{2\pi}d\varphi\int_0^{\pi}d\theta |\vec{v}|\cdot(\vec{r}\times\vec{v}) \sin{\theta}
\)

と表せます。
あとはこれを解いて剛体の運動方程式に当てはめれば、回転の減衰が表せます。


具体的な形を当てはめていきましょう。
半径\(R\)の球体に対して、3次元極座標で考えます。すると、位置\(\vec{r}\)は、
\(
\vec{r}=
\left( \begin{array}{c}
R\sin\theta \cos\varphi \\
R\sin\theta \sin\varphi \\
R\cos\theta
\end{array} \right)
\)
であり、回転方向の単位ベクトル\(\vec{e}_{\varphi}\)は、
\(
\vec{e}_{\varphi}=
\left( \begin{array}{c}
-\sin\varphi \\
\cos\varphi \\
0
\end{array} \right)
\)
です。
回転角速度\(\vec{\omega}=(0,0,\omega)\)、風の方向\(\vec{u}=(u,0,0)\)
であると考えれば、
\(
\vec{r}\times \vec{\omega}=
\left( \begin{array}{c}
R\omega \sin\theta\sin\varphi \\
-R\omega \sin\theta\cos\varphi \\
0
\end{array} \right)
\)
であり、
\(
(\vec{u}\cdot \vec{e}_{\varphi})\vec{e}_{\varphi}=
\left( \begin{array}{c}
u \sin\varphi\sin\varphi \\
-u \sin\varphi\cos\varphi \\
0
\end{array} \right)
\)
となります。よって、相対速度\(\vec{v}\)は
\(
\vec{v}=(\vec{u}\cdot \vec{e}_{\varphi})\vec{e}_{\varphi}-(\vec{r}\times \vec{\omega})=
\left( \begin{array}{c}
(u\sin\varphi-R\omega\sin\theta)\sin\varphi \\
-(u\sin\varphi-R\omega\sin\theta)\cos\varphi \\
0
\end{array} \right)
\)
と計算できます。
故に、\(\vec{r}\times\vec{v}\)は、
\(
\vec{r}\times\vec{v}=
\left( \begin{array}{c}
R\cos\theta(u\sin\varphi-R\omega\sin\theta)\cos\varphi \\
R\cos\theta(u\sin\varphi-R\omega\sin\theta)\sin\varphi \\
-R\sin\theta(u\sin\varphi-R\omega\sin\theta)
\end{array} \right)
\)
です。
具体的に、球体に働く力のモーメント\(\vec{N}\)を求めるためにやらなければならない積分は、
\(
\displaystyle \vec{N}=-\frac{\rho C_f}{2}R^2\int_0^{2\pi}d\varphi\int_0^{\pi}d\theta|\vec{v}|(\vec{r}\times\vec{v})\sin\theta \\
\displaystyle =-\frac{\rho C_f}{2}R^2
\left( \begin{array}{c}
R\int_0^{2\pi}d\varphi\int_0^{\pi}d\theta |u\sin\varphi-R\omega\sin\theta|(u\sin\varphi-R\omega\sin\theta)\sin\theta\cos\theta\cos\varphi \\
R\int_0^{2\pi}d\varphi\int_0^{\pi}d\theta |u\sin\varphi-R\omega\sin\theta|(u\sin\varphi-R\omega\sin\theta)\sin\theta\cos\theta\sin\varphi \\
-R\int_0^{2\pi}d\varphi\int_0^{\pi}d\theta |u\sin\varphi-R\omega\sin\theta|(u\sin\varphi-R\omega\sin\theta)\sin^2\theta
\end{array} \right)
\)
です。まず絶対値の符号を取るために場合分けを行います。
\(
|u\sin\varphi-R\omega\sin\theta| \\
=|R\omega|\cdot|\frac{u}{R\omega}\sin{\varphi}-\sin\theta|
\)
は、\(\frac{u}{R\omega}\sin{\varphi}\)に関して3つの領域に分けられます。

  1. \(\displaystyle \frac{u}{R\omega}\sin{\varphi}\le 0\)の領域
  2. \(\displaystyle 0\lt \frac{u}{R\omega}\sin{\varphi}\lt 1\)の領域
  3. \(\displaystyle 1\le \frac{u}{R\omega}\sin{\varphi}\)の領域

です。

\(0\lt \frac{u}{R\omega}\sin{\varphi}\lt 1\)が厄介なので特に考えましょう。
\(|\vec{v}|=|u\sin\varphi-R\omega\sin\theta|\)に対して、図のように考えます。
場合分け

例えば力のモーメントのx成分の積分は
場合分け_積分
となります。

こう表したのですが、x,y成分の被積分関数は\(\pi/2\)を中心に奇関数です。z成分だけは\(\pi/2\)を中心に偶関数となります。
なのでx,y成分は計算するまでもなくゼロになり、z成分だけ残ります。
これはもともとの回転角速度\(\omega\)がz成分しか持っていないから、という概要に合っています。

z成分の\(\theta\)に関する積分までは求めました。
シータ方向z成分_c
となります。
この後更に\(\varphi\)でこれを積分するのですが、僕はできませんでした。多分楕円積分に近いものが必要になるかと式の形から思われます。
\(\varphi\)方向に関しては数値計算でやってしまおうと思います。

2016/08/07追)
上記積分を近似して簡略化します。
回転している球体を上半分と下半分に分けて、球体を2つの平面に近似してしまいます。
上半分の速度\(v_{up}/latexと下半分の速度[latex]v_{down}/latexはそれぞれ
[latex]
\begin{align}
v_{up}&=u\sin_{\varphi_c}-R\omega\sin_{\theta_c} \\
v_{down}&=-u\sin_{\varphi_c}-R\omega\sin_{\theta_c}
\end{align}
\)
と書けます。ここで、\(\varphi_c,\theta_c\)は球を近似するに最適なある特定の角度を表します。
すると、近似した力のモーメントは
\(
\displaystyle N=\frac{\rho C_f}{2}R\frac{4\pi R^2}{2}\left(|v_{up}|v_{up}+|v_{down}|v_{down}\right)
\)

と導くことが出来ます。

実際の弾道のデータとの比較(回転の減衰考慮)


2015/06/07追記)
2021/08/11変更)
数値計算によって\(\varphi\)方向の数値計算を行い、比較してみます。

左図中の横軸は球の進行方向を表し、縦軸は高さを表します。
黒は参考とした実測データ、青は回転の減衰の効果を計算に入れない時、赤は回転の減衰を入れた時です。
回転数は、最大到達高さが2.4mになるような値を用いています。

回転の減衰を考慮に入れた計算結果は青の線です。
素晴らしいですね。最高です!
回転の減衰によってMagnus力が減少し、到達距離が短くなっています。
以前の計算結果である赤線の時に問題になった、最後のあたりのBB弾の伸びが違う、といった辺りがちゃんと改善されました。

なぜ質量が軽いほうが回転の減衰が早いのでしょうか?
今回の回転の減衰の導出では、表面積によってのみ、回転の減衰を引き起こす力のモーメントが変化します。なので、質量が重ければ思いほど、その分慣性モーメント\(I\)が大きいことになり、回転量は変化しにくいことになります。

[adsense2]


ちなみに、Magnus力のする仕事はゼロです。
なぜなら、Magnus力の働く方向は粒子の速度に垂直なはずで、方向は\(\vec{v}\times \vec{\omega}\)です。
その仕事は、係数を無視して、
\(
\begin{align}
&\int_{\vec{r}_{(t)}}^{\vec{r}_{(t+\Delta t)}}(\vec{v}\times\vec{\omega})\cdot d\vec{r} \\
&=\int_t^{t+\Delta t} (\vec{v}\times\vec{\omega})\cdot \vec{v} dt \\
&=\int_t^{t+\Delta t} 0{dt}
&=0
\end{align}
\)
となるからです。
・・・ということは、Magnus力が仕事をすることはあり得ません。

fortran90によるコードはこちらへ↓
弾道計算(BB弾)のコード

参考文献


[1]伊東敏雄著『な~るほど!の力学』学術図書出版社 (1994) p.220
[2]Faith A. Morrison, “Data Correlation for Drag Coefficient for Sphere,” Department of Chemical Engineering, Michigan Technological University, Houghton, MI (2015/02/08 アクセス確認)
[3]NASA, Ideal Lift of a Spinning Ball(2015/02/08 アクセス確認)
[4]国立天文台編『理科年表 平成21年 第82冊』丸善株式会社 (2009) p.378
[5]国立天文台編『理科年表 平成21年 第82冊』丸善株式会社 (2009) p.376

[6]第9章 境界層と物体まわりの流れ
[7]Skin friction drag

[8]流体力学講話・つまみ食い(その5)

[9]鳴尾 丈司, 溝田 武人, 下園 仁志, “一様気流中で高速回転するゴルフボールの空気力測定と飛しょう実験” 日本機械学会論文集 B編 Vol. 70 (2004) No. 697 P 2371-2377

[10]第3章 境界層理論, 3.5.4摩擦抵抗係数 \(C_{D_f}\)

[11]石岡、ホップアップの回転数測定 TM VSR-10 G-SPEC

[12]放物運動 -初等力学の未解決問題:速度の2乗に比例する空気抵抗を持つ放物運動