部材内部のある点に着目したとき、応力の大きさは観測する面の向きによって変化します。応力変換の理論を用いると、任意の方向の応力を計算でき、特にせん断応力がゼロとなる面(主面)に作用する主応力を求めることができます。
本記事の内容
- 2次元応力状態の定義
- 応力変換公式の導出
- 主応力 $\sigma_1, \sigma_2$ と主方向
- 最大せん断応力
- モールの応力円の構成と読み方
- Pythonでの可視化
前提知識
2次元応力状態
平面応力状態では、ある点の応力は3つの成分 $\sigma_x$, $\sigma_y$, $\tau_{xy}$ で表されます。
応力変換公式
$x$軸から角度 $\theta$ だけ回転した面での垂直応力 $\sigma_{x’}$ とせん断応力 $\tau_{x’y’}$ は:
$$ \boxed{\sigma_{x’} = \frac{\sigma_x + \sigma_y}{2} + \frac{\sigma_x – \sigma_y}{2}\cos 2\theta + \tau_{xy}\sin 2\theta} $$
$$ \boxed{\tau_{x’y’} = -\frac{\sigma_x – \sigma_y}{2}\sin 2\theta + \tau_{xy}\cos 2\theta} $$
導出
角度 $\theta$ の傾斜面について力の釣り合いを考えます。傾斜面の面積を $dA$ とすると、$x$ 方向の面の面積は $dA\cos\theta$、$y$ 方向の面の面積は $dA\sin\theta$ です。
傾斜面の法線方向の力の釣り合い:
$$ \sigma_{x’} dA = \sigma_x (dA\cos\theta)\cos\theta + \sigma_y (dA\sin\theta)\sin\theta + \tau_{xy}(dA\cos\theta)\sin\theta + \tau_{xy}(dA\sin\theta)\cos\theta $$
$dA$ で割り、$\cos^2\theta = (1+\cos 2\theta)/2$, $\sin^2\theta = (1-\cos 2\theta)/2$, $2\sin\theta\cos\theta = \sin 2\theta$ を用いて整理すると上記の公式を得ます。
主応力
せん断応力がゼロとなる面($\tau_{x’y’} = 0$)を求めます:
$$ \tan 2\theta_p = \frac{2\tau_{xy}}{\sigma_x – \sigma_y} $$
この角度 $\theta_p$ を応力変換公式に代入すると、主応力が得られます:
$$ \boxed{\sigma_{1,2} = \frac{\sigma_x + \sigma_y}{2} \pm \sqrt{\left(\frac{\sigma_x – \sigma_y}{2}\right)^2 + \tau_{xy}^2}} $$
最大せん断応力
$$ \boxed{\tau_{\max} = \sqrt{\left(\frac{\sigma_x – \sigma_y}{2}\right)^2 + \tau_{xy}^2} = \frac{\sigma_1 – \sigma_2}{2}} $$
最大せん断応力は主方向から $45°$ 傾いた面に作用します。
モールの応力円
応力変換公式を変形すると:
$$ \left(\sigma_{x’} – \frac{\sigma_x + \sigma_y}{2}\right)^2 + \tau_{x’y’}^2 = \left(\frac{\sigma_x – \sigma_y}{2}\right)^2 + \tau_{xy}^2 $$
これは $\sigma$-$\tau$ 平面上で中心 $C = ((\sigma_x+\sigma_y)/2, 0)$、半径 $R = \sqrt{((\sigma_x-\sigma_y)/2)^2 + \tau_{xy}^2}$ の円を表します。
描き方
- 点 $A = (\sigma_x, \tau_{xy})$ をプロット($x$ 面の応力状態)
- 点 $B = (\sigma_y, -\tau_{xy})$ をプロット($y$ 面の応力状態)
- $A$ と $B$ を結ぶ線分の中点が中心 $C$
- $C$ を中心として $A$(または $B$)を通る円を描く
- 円と $\sigma$ 軸の交点が主応力 $\sigma_1, \sigma_2$
- 円の頂点が最大せん断応力
Pythonでの可視化
import numpy as np
import matplotlib.pyplot as plt
def mohr_circle(sigma_x, sigma_y, tau_xy):
"""モールの応力円を描画"""
center = (sigma_x + sigma_y) / 2
radius = np.sqrt(((sigma_x - sigma_y) / 2)**2 + tau_xy**2)
sigma_1 = center + radius
sigma_2 = center - radius
tau_max = radius
theta_p = 0.5 * np.arctan2(2 * tau_xy, sigma_x - sigma_y)
return center, radius, sigma_1, sigma_2, tau_max, theta_p
# 例:σx=80MPa, σy=20MPa, τxy=30MPa
sx, sy, txy = 80, 20, 30
C, R, s1, s2, tmax, tp = mohr_circle(sx, sy, txy)
fig, axes = plt.subplots(1, 2, figsize=(16, 7))
# (1) モールの応力円
theta = np.linspace(0, 2*np.pi, 300)
axes[0].plot(C + R*np.cos(theta), R*np.sin(theta), 'b-', lw=2)
axes[0].plot([sx, sy], [txy, -txy], 'ro-', ms=8, lw=1.5, label='A-B line')
axes[0].plot(C, 0, 'k+', ms=15, mew=2, label=f'C=({C:.0f}, 0)')
axes[0].plot(s1, 0, 'g^', ms=12, label=f'$\\sigma_1$={s1:.1f}')
axes[0].plot(s2, 0, 'gv', ms=12, label=f'$\\sigma_2$={s2:.1f}')
axes[0].plot(C, tmax, 'ms', ms=10, label=f'$\\tau_{{max}}$={tmax:.1f}')
axes[0].axhline(0, color='k', lw=0.5); axes[0].axvline(0, color='k', lw=0.5)
axes[0].set_xlabel('$\\sigma$ [MPa]', fontsize=13)
axes[0].set_ylabel('$\\tau$ [MPa]', fontsize=13)
axes[0].set_title("Mohr's Circle", fontsize=14)
axes[0].set_aspect('equal'); axes[0].legend(fontsize=10); axes[0].grid(True, alpha=0.3)
# (2) 応力変換:角度依存性
angles = np.linspace(0, 180, 300)
rad = np.radians(angles)
sig = (sx+sy)/2 + (sx-sy)/2*np.cos(2*rad) + txy*np.sin(2*rad)
tau = -(sx-sy)/2*np.sin(2*rad) + txy*np.cos(2*rad)
axes[1].plot(angles, sig, 'b-', lw=2, label="$\\sigma_{x'}$")
axes[1].plot(angles, tau, 'r-', lw=2, label="$\\tau_{x'y'}$")
axes[1].axhline(0, color='k', lw=0.5)
axes[1].axvline(np.degrees(tp), color='g', ls='--', label=f'$\\theta_p$={np.degrees(tp):.1f}°')
axes[1].set_xlabel('Rotation angle $\\theta$ [deg]', fontsize=12)
axes[1].set_ylabel('Stress [MPa]', fontsize=12)
axes[1].set_title('Stress vs rotation angle', fontsize=13)
axes[1].legend(fontsize=11); axes[1].grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
まとめ
- 応力変換公式: $\sigma_{x’}, \tau_{x’y’}$ は回転角 $\theta$ の関数
- 主応力: $\sigma_{1,2} = (\sigma_x+\sigma_y)/2 \pm R$(せん断応力がゼロの面)
- 最大せん断応力: $\tau_{\max} = (\sigma_1 – \sigma_2)/2$(主方向から45°)
- モールの応力円: $\sigma$-$\tau$ 平面で視覚的に応力変換を理解
次のステップとして、以下の記事も参考にしてください。