t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

材料力学:モールの応力円をVBAで検証する。

前回の記事で書いたように、円柱状の棒を垂直に切った断面積Aと、角度θで斜めに切った断面積Bの関係が B = A / cosθとなることが理解できた。
thom.hateblo.jp

今回はここから、モールの応力円を理解するためにVBAを書いてみた。
モールの応力円とは、ドイツの応用力学者モールによって発見されたもので、仮想切断する角度θを変えながら垂直応力とせん断応力の関係をグラフにプロットすると、プロットされた点を結んだときに円になるというものである。

その前に前提の話をいくつか書いておく。

前提

以下のように、外力と内力は等しい力で釣り合っている。
f:id:t-hom:20210109115149p:plain

この力を断面に垂直な方向Pnと断面に水平な方向Psに分解する。
f:id:t-hom:20210109115802p:plain

原点とPnとPを結ぶ線は直角三角形になるので、角度θから求められる辺の比によって力の強さが求まる。
Pn=Pcosθ

同様に、
Ps = Psinθ

応力は力÷面積なので、垂直応力σ、せん断応力τはそれぞれ次の式で求まる。
※A0は断面積を表す。

 \displaystyle \sigma = \frac{P_n}{A_0 \div cos\theta}

 \displaystyle \tau = \frac{P_s}{A_0 \div cos\theta}

モールの応力円をVBAコードで検証

本当に円になるのかVBAコードを書いて試してみた。VBAはマルチバイト文字の変数に対応しているのでこういう時に便利である。
πもθもσもτも全角文字としてそのまま書けるので数式を見ながらコードに変換していくのが楽だ。

Option Explicit
Sub MohrsStressCircle()
    Const A0 = 150
    Const P = 300
    Dim θ As Double
    
    Dim r As Range: Set r = ThisWorkbook.Sheets(1).Range("A1")
    r.Value = "σ"
    r.Offset(0, 1).Value = "τ"
    
    For θ = -90 To 90 Step 1
        Set r = r.Offset(1, 0)
        
        Dim Pn: Pn = P * Cos(Radian(θ))
        Dim Ps: Ps = P * Sin(Radian(θ))
        Dim σ: σ = Pn / (A0 / Cos(Radian(θ)))
        Dim τ: τ = Ps / (A0 / Cos(Radian(θ)))
        
        r.Value = σ
        r.Offset(0, 1).Value = τ
    Next
End Sub

Function Radian(degree As Double) As Double
    Const π = 3.14159265359
    Radian = degree * (π / 180)
End Function

これを実行するとExcelシートに値がずらっと出力されるので、散布図を挿入する。

楕円が現れるけど、これは縦横のマス目が揃っていないためなので、単位とサイズをそろえると綺麗な円になる。
f:id:t-hom:20210109122316p:plain

ということで、今回はプログラミングの力を借りて本当に円になるということが実証できた。
ちゃんとした書籍に円になるって書いてあるんだから、なるに決まってるんだけどそれでも自分でわざわざ確認することで強烈な納得感を得ることができる。
これが記憶の定着に繋がるような気がする。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。