流体力学には大きく分けて2つの分野があります。流体が運動している状態を扱う 動水力学(hydrodynamics) と、流体が静止している状態を扱う 静水力学(hydrostatics) です。静水力学は流体力学のなかでも最も基礎的な分野であり、ダムや水門の設計、油圧機器、船舶の安定性評価など、エンジニアリングの幅広い領域で直接的に活用されています。
本記事では、静水力学の2大原理である パスカルの原理 と アルキメデスの原理 を中心に、静水圧の基本方程式を微小要素の力のつり合いから丁寧に導出し、平面壁・曲面に作用する静水圧力、浮力と浮体の安定性までを体系的に解説します。最後に Python による圧力分布の可視化と浮力の計算シミュレーションも実装します。
本記事の内容
- 静水圧の基本方程式の導出
- パスカルの原理と油圧システムへの応用
- 静水圧の深さ依存性 $p = p_0 + \rho g h$
- 平面壁・曲面に作用する静水圧力の合力と作用点
- アルキメデスの原理と浮力の導出
- 浮体の安定性とメタセンター
- Python による水圧分布の可視化と浮力計算
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
静水圧の基本方程式
微小流体要素の力のつり合い
静止している流体中の微小直方体要素(辺の長さ $dx$, $dy$, $dz$)を考えます。この要素に作用する力は 圧力 と 重力(体積力) のみです。流体が静止しているため、せん断応力はゼロです。
$z$ 軸を鉛直上向きにとります。微小要素の下面($z$ の位置)にかかる圧力を $p$、上面($z + dz$ の位置)にかかる圧力を $p + dp$ とすると、$z$ 方向の力のつり合いは次のようになります。
下面に上向きに作用する力:
$$ F_{\text{bottom}} = p \, dx \, dy $$
上面に下向きに作用する力:
$$ F_{\text{top}} = (p + dp) \, dx \, dy $$
微小要素に作用する重力(下向き):
$$ F_{\text{gravity}} = \rho g \, dx \, dy \, dz $$
静止条件($z$ 方向の合力 = 0)より:
$$ \begin{align} p \, dx \, dy – (p + dp) \, dx \, dy – \rho g \, dx \, dy \, dz &= 0 \\ – dp \, dx \, dy – \rho g \, dx \, dy \, dz &= 0 \\ – dp – \rho g \, dz &= 0 \end{align} $$
したがって、静水圧の基本方程式 が得られます。
$$ \begin{equation} \frac{dp}{dz} = -\rho g \end{equation} $$
この式は「深くなるほど($z$ が減少するほど)圧力が増加する」ことを意味しています。マイナス符号は $z$ 軸を上向きにとったためです。
同様に $x$ 方向と $y$ 方向についても力のつり合いを考えると、水平方向には重力が作用しないため、
$$ \frac{\partial p}{\partial x} = 0, \quad \frac{\partial p}{\partial y} = 0 $$
が得られます。つまり、静止流体中の圧力は水平方向には一様 であり、深さ方向($z$ 方向)のみの関数です。
ベクトル表記でまとめると、次の オイラーの静水圧方程式 になります。
$$ \begin{equation} \nabla p = \rho \bm{g} \end{equation} $$
ここで $\bm{g} = (0, 0, -g)$ は重力加速度ベクトルです。
パスカルの原理
密閉容器内の圧力伝達
パスカルの原理(Pascal’s principle) は次のように述べられます。
密閉された静止流体中の一点に加えた圧力は、流体のすべての点に等しく伝達される。
これは静水圧の基本方程式から理解できます。密閉容器中の流体に外部から圧力 $\Delta p$ を加えると、容器内のすべての点で圧力が $\Delta p$ だけ増加します。静水圧の基本方程式 $dp/dz = -\rho g$ は圧力の 勾配 のみを規定しており、基準圧力が $\Delta p$ だけシフトしても勾配は変わらないためです。
油圧システムへの応用
パスカルの原理は 油圧プレス や 油圧ジャッキ の動作原理です。断面積 $A_1$ の小さなピストンに力 $F_1$ を加えると、流体内の圧力は
$$ \Delta p = \frac{F_1}{A_1} $$
だけ上昇します。この圧力が断面積 $A_2$($A_2 > A_1$)の大きなピストンに伝わり、
$$ F_2 = \Delta p \cdot A_2 = F_1 \cdot \frac{A_2}{A_1} $$
という力が得られます。つまり、断面積の比 $A_2 / A_1$ だけ力が増幅されます。
数値例: 小さなピストン $A_1 = 10 \, \mathrm{cm^2}$、大きなピストン $A_2 = 500 \, \mathrm{cm^2}$ のとき、小ピストンに $F_1 = 100 \, \mathrm{N}$ を加えると、
$$ F_2 = 100 \times \frac{500}{10} = 5000 \, \mathrm{N} $$
と、50倍の力が得られます。ただし、エネルギー保存則より仕事量は等しく、小ピストンの移動距離は大ピストンの50倍必要です。
静水圧の深さ依存性
$p = p_0 + \rho g h$ の導出
非圧縮性流体($\rho = \text{const.}$)の場合、静水圧の基本方程式を積分して圧力の深さ依存性を求めましょう。
自由表面を基準にとり、自由表面からの深さを $h$(下向きを正)とします。$z$ 軸は上向きなので $h = -z + z_0$($z_0$ は自由表面の位置)です。
$$ \begin{align} \frac{dp}{dz} &= -\rho g \\ \int_{p_0}^{p} dp’ &= \int_{z_0}^{z} (-\rho g) \, dz’ \\ p – p_0 &= -\rho g (z – z_0) \\ p – p_0 &= \rho g (z_0 – z) \\ p &= p_0 + \rho g h \end{align} $$
ここで $p_0$ は自由表面での圧力(通常は大気圧)、$h = z_0 – z$ は自由表面からの深さです。
$$ \begin{equation} p = p_0 + \rho g h \end{equation} $$
この式は 静水力学で最も基本的な関係式 です。圧力は深さに対して線形に増加し、その増加率は $\rho g$ です。
ゲージ圧と絶対圧
大気圧 $p_0$ を基準にした圧力を ゲージ圧 $p_g$ と呼びます。
$$ p_g = p – p_0 = \rho g h $$
大気圧を含む圧力を 絶対圧 と呼びます。エンジニアリングでは両者を使い分けることが重要です。
数値例: 水中 10 m の深さでの圧力を求めます。$\rho = 998 \, \mathrm{kg/m^3}$, $g = 9.81 \, \mathrm{m/s^2}$, $h = 10 \, \mathrm{m}$, $p_0 = 101325 \, \mathrm{Pa}$ とすると、
$$ \begin{align} p_g &= 998 \times 9.81 \times 10 = 97904 \, \mathrm{Pa} \approx 97.9 \, \mathrm{kPa} \\ p &= 101325 + 97904 = 199229 \, \mathrm{Pa} \approx 199.2 \, \mathrm{kPa} \approx 1.97 \, \mathrm{atm} \end{align} $$
水中 10 m の深さでは、絶対圧が大気圧の約2倍になります。
平面壁に作用する静水圧力
鉛直平面壁の場合
ダムの壁面のような鉛直平面に作用する静水圧を考えます。水面から深さ $h$ の位置での圧力は $p_g = \rho g h$(ゲージ圧)です。
幅 $b$、水深 $H$ の鉛直壁面に作用する 合力 $F$ を求めます。深さ $h$ における微小面積 $dA = b \, dh$ に作用する力は $dF = \rho g h \cdot b \, dh$ ですから、
$$ \begin{align} F &= \int_0^H \rho g h \, b \, dh \\ &= \rho g b \int_0^H h \, dh \\ &= \rho g b \left[ \frac{h^2}{2} \right]_0^H \\ &= \frac{1}{2} \rho g b H^2 \end{align} $$
これは「壁面の面積 $bH$ に、重心位置での圧力 $\rho g (H/2)$ をかけたもの」と一致します。
圧力の作用点(圧力中心)
合力の作用点は壁面の重心($H/2$)よりも深い位置にあります。作用点の深さ $h_p$ はモーメントのつり合いから求められます。
$$ \begin{align} F \cdot h_p &= \int_0^H \rho g h \cdot h \cdot b \, dh \\ \frac{1}{2} \rho g b H^2 \cdot h_p &= \rho g b \int_0^H h^2 \, dh \\ \frac{1}{2} \rho g b H^2 \cdot h_p &= \rho g b \cdot \frac{H^3}{3} \\ h_p &= \frac{2H}{3} \end{align} $$
したがって、鉛直平面壁の場合、圧力中心は水面から $\frac{2}{3}H$ の深さにあります。
一般の傾斜平面
傾斜角 $\theta$ の平面壁の場合、合力と作用点は次の一般式で表されます。
$$ F = \rho g \bar{h} A $$
ここで $\bar{h}$ は壁面の図心(重心)の深さ、$A$ は壁面の面積です。
圧力中心の深さ $h_p$ は、
$$ h_p = \bar{h} + \frac{I_G}{\bar{h} A} $$
ここで $I_G$ は壁面の図心まわりの断面二次モーメントです。$I_G / (\bar{h} A) > 0$ なので、圧力中心は常に図心よりも深い位置にあります。
曲面に作用する静水圧力
曲面に作用する静水圧力は、圧力が面に対して常に法線方向に作用するため、直接積分することが困難です。そこで、水平成分と鉛直成分に分けて計算するのが定石です。
水平成分
曲面に作用する静水圧力の 水平成分 $F_H$ は、曲面を鉛直面に投影した面積に作用する力と等しくなります。
$$ F_H = \rho g \bar{h}_v A_v $$
ここで $A_v$ は鉛直投影面積、$\bar{h}_v$ はその投影面の図心の深さです。
鉛直成分
曲面に作用する静水圧力の 鉛直成分 $F_V$ は、曲面の上方にある流体の重量に等しくなります。
$$ F_V = \rho g V $$
ここで $V$ は曲面の上方にある流体の体積です。
合力
合力の大きさは、
$$ F = \sqrt{F_H^2 + F_V^2} $$
合力の方向(水平方向となす角)は、
$$ \tan \alpha = \frac{F_V}{F_H} $$
で与えられます。
アルキメデスの原理
浮力の導出
アルキメデスの原理 は「流体中に沈んだ物体は、その物体が排除した流体の重量に等しい上向きの力(浮力)を受ける」というものです。これを静水圧の基本方程式から導出しましょう。
流体中に沈んだ物体の表面を考えます。表面の任意の微小面積 $dA$ に作用する圧力は、その位置の深さ $h$ に応じた静水圧 $p = p_0 + \rho g h$ です。圧力は面に対して法線方向(内向き)に作用します。
物体表面全体にわたって圧力を積分すると、水平方向の力は対称性から打ち消し合い、鉛直方向の合力(浮力 $F_B$)のみが残ります。
物体の底面(深さ $h_2$)と上面(深さ $h_1$、$h_1 < h_2$)に注目すると、簡単のため断面積 $A$ の直方体で考えると、
$$ \begin{align} F_B &= p_{\text{bottom}} \cdot A – p_{\text{top}} \cdot A \\ &= (\rho g h_2) A – (\rho g h_1) A \\ &= \rho g (h_2 – h_1) A \\ &= \rho g V_{\text{disp}} \end{align} $$
ここで $V_{\text{disp}} = (h_2 – h_1) A$ は物体が排除した流体の体積です。
一般的な形状の物体に対しても、ガウスの発散定理を用いて厳密に導出できます。物体表面 $S$ に作用する圧力の鉛直成分の合力は、
$$ \begin{align} F_B &= -\oint_S p \, \hat{n}_z \, dA \\ &= -\int_V \frac{\partial p}{\partial z} \, dV \quad (\text{ガウスの発散定理}) \\ &= -\int_V (-\rho g) \, dV \quad \left(\because \frac{\partial p}{\partial z} = -\rho g \right) \\ &= \rho g V_{\text{disp}} \end{align} $$
したがって、アルキメデスの原理 が成立します。
$$ \begin{equation} F_B = \rho_f g V_{\text{disp}} \end{equation} $$
ここで $\rho_f$ は流体の密度、$V_{\text{disp}}$ は物体が排除した流体の体積です。浮力は物体の密度や材質によらず、排除した流体の体積と流体の密度のみで決まるという点が重要です。
浮沈の条件
物体の密度 $\rho_s$、流体の密度 $\rho_f$ とすると、
| 条件 | 状態 |
|---|---|
| $\rho_s < \rho_f$ | 浮く(一部が水面上に出る) |
| $\rho_s = \rho_f$ | 中立浮力(任意の深さで静止) |
| $\rho_s > \rho_f$ | 沈む |
浮いている物体の場合、浮力と重力がつり合うため、
$$ \rho_f g V_{\text{disp}} = \rho_s g V_{\text{total}} $$
$$ \frac{V_{\text{disp}}}{V_{\text{total}}} = \frac{\rho_s}{\rho_f} $$
例えば、氷($\rho_s \approx 917 \, \mathrm{kg/m^3}$)が水($\rho_f \approx 998 \, \mathrm{kg/m^3}$)に浮くとき、水面下に沈んでいる割合は約 $917/998 \approx 91.9\%$ です。氷山の約 $92\%$ が水面下にあるという事実は、この計算から直ちに理解できます。
浮体の安定性
船舶設計において、浮いている物体(浮体)が傾いたときに元の姿勢に戻れるかどうかは極めて重要です。これを 浮体の安定性 と呼びます。
重心・浮心・メタセンター
浮体の安定性を議論するために、3つの重要な点を定義します。
| 記号 | 名称 | 定義 |
|---|---|---|
| $G$ | 重心(center of gravity) | 物体の質量の中心 |
| $B$ | 浮心(center of buoyancy) | 排除した流体部分の体積中心 |
| $M$ | メタセンター(metacenter) | 浮体が微小角度傾いたときの浮力の作用線と中心軸の交点 |
メタセンター高さ
メタセンター高さ(metacentric height) $\overline{GM}$ は浮体の安定性の指標です。
$$ \begin{equation} \overline{GM} = \overline{BM} – \overline{BG} \end{equation} $$
ここで $\overline{BM}$ は浮心からメタセンターまでの距離、$\overline{BG}$ は浮心から重心までの距離です。$\overline{BM}$ は次の式で計算されます。
$$ \overline{BM} = \frac{I_{wl}}{V_{\text{disp}}} $$
ここで $I_{wl}$ は水線面(水面と浮体の交線で囲まれた面)の、傾斜軸まわりの断面二次モーメントです。
安定性の判定
浮体が微小角度 $\theta$ だけ傾いたとき、復原モーメント $M_R$ は、
$$ M_R = \rho_f g V_{\text{disp}} \cdot \overline{GM} \cdot \sin\theta $$
微小角度では $\sin\theta \approx \theta$ なので、
$$ M_R \approx \rho_f g V_{\text{disp}} \cdot \overline{GM} \cdot \theta $$
| 条件 | 安定性 | 挙動 |
|---|---|---|
| $\overline{GM} > 0$($M$ が $G$ より上) | 安定 | 復原モーメントが元に戻す方向に作用 |
| $\overline{GM} = 0$ | 中立 | 傾いた姿勢を保つ |
| $\overline{GM} < 0$($M$ が $G$ より下) | 不安定 | 転覆する |
船舶設計では $\overline{GM}$ を十分に正の値に保つことが安全上の要件となります。
具体的な計算例
例1: ダム壁への水圧
高さ $H = 15 \, \mathrm{m}$、幅 $b = 30 \, \mathrm{m}$ の鉛直ダム壁に作用する水圧の合力と作用点を求めます。
合力:
$$ \begin{align} F &= \frac{1}{2} \rho g b H^2 \\ &= \frac{1}{2} \times 998 \times 9.81 \times 30 \times 15^2 \\ &= \frac{1}{2} \times 998 \times 9.81 \times 30 \times 225 \\ &= 33{,}064{,}515 \, \mathrm{N} \\ &\approx 33.1 \, \mathrm{MN} \end{align} $$
作用点(水面からの深さ):
$$ h_p = \frac{2}{3} H = \frac{2}{3} \times 15 = 10 \, \mathrm{m} $$
ダム壁には約 33.1 MN(約 3,370 トン重)の力が、水面から 10 m の深さに作用します。
例2: 球体の浮力計算
半径 $r = 0.5 \, \mathrm{m}$、質量 $m = 200 \, \mathrm{kg}$ の球体を水中に沈めたとき、必要な係留力を求めます。
球体の体積:
$$ V = \frac{4}{3} \pi r^3 = \frac{4}{3} \pi (0.5)^3 = 0.5236 \, \mathrm{m^3} $$
浮力:
$$ F_B = \rho g V = 998 \times 9.81 \times 0.5236 = 5128 \, \mathrm{N} $$
重力:
$$ W = mg = 200 \times 9.81 = 1962 \, \mathrm{N} $$
浮力が重力を上回るので、球体は浮き上がろうとします。必要な下向きの係留力は、
$$ T = F_B – W = 5128 – 1962 = 3166 \, \mathrm{N} \approx 3.17 \, \mathrm{kN} $$
Python 実装
水圧分布の可視化
ダム壁に作用する静水圧力の分布をグラフで可視化します。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches
# --- パラメータ ---
rho = 998.0 # 水の密度 [kg/m^3]
g = 9.81 # 重力加速度 [m/s^2]
H = 15.0 # 水深 [m]
b = 30.0 # ダム壁の幅 [m]
# --- 深さと圧力の計算 ---
h = np.linspace(0, H, 500) # 深さ [m]
p_gauge = rho * g * h # ゲージ圧 [Pa]
p_gauge_kPa = p_gauge / 1000 # [kPa]
# --- 合力と作用点 ---
F_total = 0.5 * rho * g * b * H**2 # 合力 [N]
h_p = 2 / 3 * H # 作用点の深さ [m]
# --- 描画 ---
fig, axes = plt.subplots(1, 2, figsize=(14, 7))
# 左図: 圧力分布
ax1 = axes[0]
ax1.plot(p_gauge_kPa, h, color="steelblue", linewidth=2.5)
ax1.fill_betweenx(h, 0, p_gauge_kPa, alpha=0.3, color="steelblue")
ax1.set_xlabel("Gauge Pressure [kPa]", fontsize=13)
ax1.set_ylabel("Depth h [m]", fontsize=13)
ax1.set_title("Hydrostatic Pressure Distribution on a Dam Wall", fontsize=14)
ax1.invert_yaxis()
ax1.axhline(y=h_p, color="red", linestyle="--", linewidth=1.5,
label=f"Center of Pressure: h_p = {h_p:.1f} m")
ax1.axhline(y=H / 2, color="orange", linestyle="--", linewidth=1.5,
label=f"Centroid: h_c = {H/2:.1f} m")
ax1.legend(fontsize=11, loc="lower right")
ax1.grid(True, linestyle="--", alpha=0.5)
ax1.set_xlim(0, None)
# 右図: ダム壁の断面模式図
ax2 = axes[1]
# 水の領域
water = patches.Rectangle((0, 0), 3, H, linewidth=0, facecolor="lightblue", alpha=0.5)
ax2.add_patch(water)
# ダム壁
wall = patches.Rectangle((3, -1), 0.5, H + 2, linewidth=2,
edgecolor="gray", facecolor="darkgray")
ax2.add_patch(wall)
# 圧力の矢印(いくつかの深さで)
for hi in np.linspace(1, H - 0.5, 8):
arrow_len = (hi / H) * 2.5
ax2.annotate("", xy=(3, hi), xytext=(3 - arrow_len, hi),
arrowprops=dict(arrowstyle="->", color="steelblue", lw=1.8))
# 合力の矢印
ax2.annotate("", xy=(3, h_p), xytext=(0, h_p),
arrowprops=dict(arrowstyle="-|>", color="red", lw=2.5))
ax2.text(-0.2, h_p + 0.5, f"F = {F_total/1e6:.1f} MN", fontsize=12,
color="red", fontweight="bold")
# 注釈
ax2.text(1.5, -0.5, "Water", fontsize=14, ha="center", color="steelblue")
ax2.text(3.25, -0.5, "Wall", fontsize=11, ha="center", color="gray")
ax2.set_xlim(-1, 5)
ax2.set_ylim(-1.5, H + 1)
ax2.invert_yaxis()
ax2.set_xlabel("x [m]", fontsize=13)
ax2.set_ylabel("Depth h [m]", fontsize=13)
ax2.set_title("Schematic: Pressure on Dam Wall", fontsize=14)
ax2.set_aspect("equal")
ax2.grid(True, linestyle="--", alpha=0.3)
plt.tight_layout()
plt.savefig("hydrostatic_pressure_dam.png", dpi=150, bbox_inches="tight")
plt.show()
print(f"合力 F = {F_total:.0f} N = {F_total/1e6:.2f} MN")
print(f"作用点の深さ h_p = {h_p:.2f} m")
浮力の計算シミュレーション
物体の密度を変化させたとき、水に浮く物体の喫水(沈んでいる割合)がどう変わるかをシミュレーションします。
import numpy as np
import matplotlib.pyplot as plt
# --- パラメータ ---
rho_water = 998.0 # 水の密度 [kg/m^3]
g = 9.81 # 重力加速度 [m/s^2]
# --- (1) 物体密度 vs 喫水割合 ---
rho_obj = np.linspace(50, 1200, 500) # 物体の密度 [kg/m^3]
# 浮く場合: 沈んでいる体積の割合 = rho_obj / rho_water
# 沈む場合: 100% 沈んでいる
draft_ratio = np.minimum(rho_obj / rho_water, 1.0)
fig, axes = plt.subplots(1, 2, figsize=(14, 6))
# 左図: 密度 vs 喫水割合
ax1 = axes[0]
colors = np.where(rho_obj <= rho_water, "steelblue", "coral")
for i in range(len(rho_obj) - 1):
ax1.plot(rho_obj[i:i+2], draft_ratio[i:i+2] * 100,
color=colors[i], linewidth=2.5)
# 代表的な物体をプロット
materials = {
"発泡スチロール": 30,
"木材 (杉)": 380,
"氷": 917,
"水": 998,
"コンクリート": 2300,
}
# 浮くものだけマーカーを打つ
for name, rho_m in materials.items():
ratio = min(rho_m / rho_water, 1.0) * 100
marker_color = "steelblue" if rho_m <= rho_water else "coral"
ax1.plot(rho_m, ratio, "o", markersize=10, color=marker_color, zorder=5)
offset_y = 5 if rho_m < 500 else -7
ax1.annotate(name, (rho_m, ratio), textcoords="offset points",
xytext=(5, offset_y), fontsize=10)
ax1.axvline(x=rho_water, color="gray", linestyle=":", linewidth=1.2,
label=f"ρ_water = {rho_water:.0f} kg/m³")
ax1.set_xlabel("Object Density ρ_obj [kg/m³]", fontsize=13)
ax1.set_ylabel("Draft Ratio (Submerged Volume) [%]", fontsize=13)
ax1.set_title("Buoyancy: Object Density vs Draft Ratio", fontsize=14)
ax1.legend(fontsize=11)
ax1.grid(True, linestyle="--", alpha=0.5)
ax1.set_xlim(0, 1300)
ax1.set_ylim(0, 110)
# 右図: 球体の浮力シミュレーション
ax2 = axes[1]
r = 0.5 # 球の半径 [m]
V_total = (4/3) * np.pi * r**3 # 球の全体積
rho_sphere_values = [300, 500, 700, 900]
for rho_s in rho_sphere_values:
m = rho_s * V_total # 質量 [kg]
W = m * g # 重力 [N]
F_B = rho_water * g * V_total # 完全水没時の浮力 [N]
if rho_s <= rho_water:
# 浮く: 排除体積 = m / rho_water
V_disp = m / rho_water
ratio = V_disp / V_total
else:
ratio = 1.0
# 球の断面を描画
theta = np.linspace(0, 2 * np.pi, 200)
x_offset = rho_sphere_values.index(rho_s) * 2.5
x_circle = r * np.cos(theta) + x_offset
y_circle = r * np.sin(theta)
# 水面の位置 (球の中心を原点としたとき)
# 沈んでいる割合 ratio から水面の y 座標を計算
# 球冠の体積 V_cap = pi*h^2*(3r-h)/3 で h = 沈んでいる高さ
# ratio * V_total = V_cap を数値的に解く
h_vals = np.linspace(0, 2*r, 1000)
V_cap = np.pi * h_vals**2 * (3*r - h_vals) / 3
h_submerged = np.interp(ratio * V_total, V_cap, h_vals)
y_waterline = r - h_submerged # 球の中心基準
# 水面下を塗りつぶし
mask = y_circle <= y_waterline
ax2.fill(x_circle, y_circle, color="lightgray", alpha=0.3)
# 水面下の部分を青で塗る
theta_fill = np.linspace(0, 2*np.pi, 500)
x_fill = r * np.cos(theta_fill) + x_offset
y_fill = r * np.sin(theta_fill)
y_fill_clipped = np.clip(y_fill, -r, y_waterline)
# 簡易的に: 水面より下の部分だけ塗る
ax2.fill_between(x_fill, y_fill, y_waterline,
where=(y_fill <= y_waterline), color="steelblue", alpha=0.4)
# 水面線
ax2.plot([x_offset - r - 0.3, x_offset + r + 0.3],
[y_waterline, y_waterline],
color="blue", linewidth=1.5, linestyle="--")
# 球の輪郭
ax2.plot(x_circle, y_circle, color="black", linewidth=1.5)
# ラベル
ax2.text(x_offset, -r - 0.3, f"ρ={rho_s}\n({ratio*100:.0f}%)",
ha="center", fontsize=10)
ax2.set_xlim(-1.5, 9)
ax2.set_ylim(-1.5, 1.5)
ax2.set_aspect("equal")
ax2.set_title("Floating Spheres at Various Densities", fontsize=14)
ax2.set_xlabel("x [m]", fontsize=13)
ax2.grid(True, linestyle="--", alpha=0.3)
ax2.invert_yaxis()
plt.tight_layout()
plt.savefig("buoyancy_simulation.png", dpi=150, bbox_inches="tight")
plt.show()
まとめ
本記事では、静水力学の基本であるパスカルの原理とアルキメデスの原理を、微小要素の力のつり合いから丁寧に導出しました。
- 静水圧の基本方程式: $dp/dz = -\rho g$ から、静止流体中の圧力は深さのみの関数であることが導かれる
- パスカルの原理: 密閉流体中の一点に加えた圧力はすべての点に等しく伝達される。油圧システムの基盤となる原理
- 静水圧の深さ依存性: $p = p_0 + \rho g h$ により、圧力は深さに対して線形に増加する
- 平面壁への静水圧力: 合力は $F = \rho g \bar{h} A$、圧力中心は常に図心より深い
- アルキメデスの原理: 浮力 $F_B = \rho_f g V_{\text{disp}}$ は排除した流体の重量に等しい
- 浮体の安定性: メタセンター高さ $\overline{GM} > 0$ が安定浮遊の条件
これらの原理は、ダムや水門の設計、船舶工学、油圧機器、潜水艇の設計など、実際のエンジニアリングで広く利用されています。
次のステップとして、流体が動き始めたときの解析に進みましょう。流線と連続の方程式、そしてエネルギー保存則であるベルヌーイの定理を学ぶことで、流体力学の理解が大きく広がります。