航空機の主翼や胴体、ヘリコプターのテールブーム、あるいは橋桁のチャンネル材を思い浮かべてください。これらはすべて、肉厚が断面の代表寸法に比べて非常に薄い「薄肉断面」でできています。なぜ中身を詰めた中実断面ではなく、わざわざ薄い板を組み合わせた断面を使うのでしょうか。答えは、同じ重量で曲げやねじりにずっと強い構造を作れるからです。材料を断面の外周に配置するほど、断面二次モーメントや断面の極二次モーメントが大きくなり、軽くて剛性の高い構造ができあがります。
ところが、薄肉断面には中実断面では見落としがちな落とし穴があります。それは「荷重をどこに加えるか」によって、部材がねじれたり、ねじれなかったりするという現象です。C形(チャンネル)断面の片持ち梁の先端に下向きの力を加えると、力を断面のどこに加えるかで部材が単に下にたわむだけでなく、軸まわりにねじれてしまうことがあります。このねじれを生まない特別な点がせん断中心であり、その存在を理解する鍵が断面内部を流れるせん断流です。
せん断流とせん断中心は、次の2つの場面で決定的に重要になります。
- 航空機構造設計:主翼の桁(スパー)やストリンガーで構成された薄肉構造に揚力が作用するとき、ねじれを避けるためにせん断中心を正しく把握し、桁の配置や荷重経路を設計します。これを誤ると翼が予期せずねじれ、フラッター(自励振動)の原因にもなります。
- 土木・機械の開断面部材:チャンネル鋼やアングル材を梁として使うとき、荷重作用線がせん断中心からずれているとねじれ応力が重畳し、想定外の応力集中や座屈を招きます。
本記事の内容
- せん断流 $q = VQ/I$ がどこから来るのか、せん断応力との関係から導出する
- 開断面(C形・I形)のフランジとウェブのせん断流分布を積分で求める
- 合せん断力のモーメント釣合いから、せん断中心の位置を導出する
- 閉断面(箱形)でせん断流がどう変わるかを理解する
- PythonでC形・I形・箱形断面のせん断流分布を計算してプロットし、せん断中心位置を数値的に求める
前提知識
この記事を読む前に、以下の記事を読んでおくと理解がぐっと深まります。せん断流の出発点である梁のせん断応力と、断面二次モーメントを与える曲げ応力の理論は必須の土台です。
- 梁のせん断応力をわかりやすく解説 — せん断応力 $\tau = VQ/(Ib)$ の成り立ち
- 曲げ応力の理論と導出 — 断面二次モーメントと曲げ応力 $\sigma = My/I$
特に、せん断流は梁のせん断応力公式に板厚 $t$ を掛けたものだという見方が本記事の核になります。せん断応力の導出を曖昧に覚えている場合は、上のリンクで「微小要素の軸方向釣合いから $\tau$ が出てくる」という筋道を先に確認しておくと、以降の議論が自然に頭に入ります。
せん断流とは
まず「せん断流」という言葉のイメージをつかみましょう。川の流れを思い浮かべてください。川幅が広いところでは水はゆっくり流れ、狭まったところでは速く流れます。しかし、ある断面を1秒間に通過する水の総量(流量)は、川幅によらずどこでも一定です。薄肉断面のせん断応力にも、これとよく似た性質があります。板厚が薄いところではせん断応力が大きく、厚いところでは小さくなりますが、せん断応力 × 板厚 という量は、断面内をなめらかに「流れる」量として扱えるのです。
この「せん断応力 × 板厚」をせん断流と呼び、記号 $q$ で表します。
$$ \begin{equation} q = \tau \, t \end{equation} $$
ここで $\tau$ は板の中央面に沿ったせん断応力、$t$ は板厚です。単位は応力(Pa = N/m²)に長さ(m)を掛けたものなので、N/m、すなわち「単位長さあたりの力」になります。せん断流は、断面の壁に沿って単位長さあたり何ニュートンの力が流れているかを表す量だ、と覚えておくとよいでしょう。
なぜわざわざ応力ではなく「応力 × 板厚」を考えるのでしょうか。薄肉断面では、板厚方向のせん断応力分布をほぼ一定とみなせます(薄いので板厚方向の変化を無視できる)。すると、板に沿った座標 $s$ の関数として $q(s)$ さえわかれば、各点の応力は $\tau = q/t$ で復元できます。さらに、後で見るように $q$ は川の流量のように連続的につながり、分岐点では合流・分流の法則(キルヒホッフの電流則とそっくり)に従います。つまりせん断流は、薄肉断面の応力状態を見通しよく扱うための「ちょうどよい変数」なのです。
ここまでで $q = \tau t$ という定義を導入しました。では、この $q$ が梁の曲げによるせん断力 $V$ とどう結びつくのか、その関係式を次に導出していきましょう。
せん断流 q = VQ/I の導出
ゴールの宣言
これから示したいのは、薄肉断面の壁に沿った位置 $s$ におけるせん断流が
$$ \begin{equation} q(s) = \frac{V \, Q(s)}{I} \end{equation} $$
で与えられることです。ここで $V$ は断面に作用するせん断力、$I$ は中立軸まわりの断面二次モーメント、$Q(s)$ は位置 $s$ までの部分断面の中立軸まわりの断面一次モーメントです。この式は梁のせん断応力公式 $\tau = VQ/(Ib)$ で $b \to t$ とし、両辺に $t$ を掛けたものに一致します。なぜそうなるのかを、微小要素のつり合いから丁寧に追っていきます。
軸方向のつり合いから出発する
梁が曲げを受けると、各断面には曲げモーメント $M$ が生じ、断面の高さ位置 $y$(中立軸からの距離)における曲げ応力は
$$ \sigma = \frac{M y}{I} $$
でした。梁に沿って曲げモーメントが変化する場合、$\sigma$ も梁の軸方向に変化します。この軸方向の応力の不釣合いを支えているのが、壁に沿ったせん断応力なのです。
薄肉断面から、壁に沿って端から位置 $s$ までの部分を切り出し、さらに梁の軸方向に微小長さ $dx$ だけ取った要素を考えます。この要素には次の3つの軸方向力が働きます。
- 左側面(位置 $x$)に作用する曲げ応力の合力
- 右側面(位置 $x + dx$)に作用する曲げ応力の合力
- 切り出した縦の面(板厚 $t$、長さ $dx$)に作用するせん断応力 $\tau$
左右の側面に働く軸方向力の差は、部分断面 $A^*$(端から $s$ までの面積)にわたる曲げ応力の積分の差です。位置 $x$ での合力を $F(x)$ とすると、
$$ F(x) = \int_{A^*} \sigma \, dA = \int_{A^*} \frac{M(x)\, y}{I}\, dA = \frac{M(x)}{I} \int_{A^*} y \, dA $$
ここで現れた $\int_{A^*} y \, dA$ こそが、部分断面 $A^*$ の中立軸まわりの断面一次モーメント $Q$ です。
$$ \begin{equation} Q = \int_{A^*} y \, dA \end{equation} $$
$Q$ を使うと $F(x) = M(x)\,Q/I$ と書けます。$Q$ は $x$ によらない(断面形状で決まる)量なので、$x$ 方向に微分すると
$$ \frac{dF}{dx} = \frac{Q}{I}\frac{dM}{dx} $$
となります。ここで梁理論の基本関係 $dM/dx = V$(曲げモーメントの勾配がせん断力)を代入すると、
$$ \frac{dF}{dx} = \frac{V \, Q}{I} $$
が得られます。左右側面の軸方向力の差 $dF = (dF/dx)\,dx$ は、要素の軸方向のつり合いから、切り出した縦の面に働くせん断力 $\tau \, t \, dx$ と釣り合わなければなりません。すなわち
$$ \tau \, t \, dx = dF = \frac{V \, Q}{I}\, dx $$
両辺を $dx$ で割り、$\tau\, t = q$ を思い出すと、
$$ \begin{equation} q = \tau \, t = \frac{V \, Q}{I} \end{equation} $$
が導かれました。これがせん断流の基本式です。
式の意味を読み解く
導出を振り返ると、せん断流の正体がはっきりします。曲げモーメントが梁に沿って変化する(=せん断力 $V$ が存在する)と、各断面の曲げ応力分布も変化し、部分断面に働く軸方向力に不釣合いが生じます。その不釣合いを壁に沿ったせん断流が補い、軸方向のつり合いを保っているのです。
ここで重要なのは、$q$ が部分断面の断面一次モーメント $Q(s)$ に比例するという点です。$Q(s)$ は端から $s$ まで積分した量なので、自由端(断面の縁)では $Q = 0$、したがって $q = 0$ になります。そして中立軸に近づくほど $Q$ は大きくなり、中立軸上で最大になります(中立軸より下では $y<0$ の寄与が加わるが、$Q$ の絶対値は中立軸で最大)。せん断流は縁でゼロ、中立軸付近で最大という分布をとるわけです。
ここまでで、せん断流が断面一次モーメント $Q(s)$ を通じて断面形状から決まることがわかりました。次は、この $q(s)$ を実際にC形やI形の断面に当てはめ、フランジとウェブに沿って積分して具体的な分布を求めてみましょう。
開断面のせん断流分布:C形断面を例に
断面のモデル化
C形(チャンネル)断面を、上フランジ・ウェブ・下フランジの3枚の薄板でモデル化します。板厚は全体で一定の $t$、ウェブの高さを $h$、フランジの幅を $b$ とします。中立軸は対称性から高さの中央(上下フランジの中間)に取ります。曲げ・せん断は鉛直方向に作用するとし、せん断力 $V$ は下向き(正)とします。
薄肉なので、各板の板厚中央線に沿った座標 $s$ をとり、その関数として $Q(s)$ を求め、$q(s) = VQ(s)/I$ を計算していきます。出発点($s=0$)は上フランジの自由端(左端)とします。自由端では $Q=0$ なので $q=0$ から始まります。
上フランジのせん断流
上フランジは中立軸から上に $y = h/2$ の高さにある水平な板です。左端から右向きに距離 $s_1$($0 \le s_1 \le b$)まで積分すると、部分断面は幅 $s_1$、板厚 $t$ の細長い長方形で、その重心高さは $h/2$ で一定です。したがって断面一次モーメントは
$$ Q(s_1) = (\text{面積}) \times (\text{重心高さ}) = (t\, s_1)\cdot \frac{h}{2} = \frac{t\, h}{2}\, s_1 $$
これは $s_1$ の1次関数です。せん断流は
$$ q(s_1) = \frac{V}{I}\, Q(s_1) = \frac{V t h}{2 I}\, s_1 $$
となり、自由端 $s_1=0$ でゼロ、フランジとウェブの接合点 $s_1 = b$ で最大値
$$ q_1 = \frac{V t h b}{2 I} $$
をとります。上フランジ内では $s_1$ に比例して直線的に増加するわけです。フランジでは高さ $y=h/2$ が一定なので、$Q$ が「面積に比例」して直線的に増えるのが特徴です。
ウェブのせん断流
ウェブはフランジとの接合点(上端)から下向きに座標 $s_2$($0 \le s_2 \le h$)をとります。ウェブの位置 $s_2$ における高さは $y = h/2 – s_2$ です。ウェブ部分の $Q$ は、フランジから持ち越した値 $Q(b) = t h b/2$ に、ウェブの上端から $s_2$ までの寄与を加えたものです。
ウェブ上端から $s_2$ までの部分断面(板厚 $t$、長さ $s_2$)の重心高さは $h/2 – s_2/2$ なので、その断面一次モーメントは
$$ \Delta Q = (t\, s_2)\left(\frac{h}{2} – \frac{s_2}{2}\right) = t\left(\frac{h}{2}s_2 – \frac{s_2^2}{2}\right) $$
これを足し合わせると、ウェブ内の断面一次モーメントは
$$ Q(s_2) = \frac{t h b}{2} + t\left(\frac{h}{2}s_2 – \frac{s_2^2}{2}\right) $$
$s_2$ について2次関数になっている点に注目してください。フランジでは直線、ウェブでは放物線という分布の違いは、フランジでは高さが一定、ウェブでは高さが変化することの直接の帰結です。せん断流は
$$ q(s_2) = \frac{V}{I}\left[\frac{t h b}{2} + t\left(\frac{h}{2}s_2 – \frac{s_2^2}{2}\right)\right] $$
ウェブ上端 $s_2 = 0$ でフランジから受け継いだ値 $q_1 = Vthb/(2I)$ をとり、下に進むにつれて放物線的に増加します。中立軸($s_2 = h/2$)でせん断流は最大になります。これは $dQ/ds_2 = t(h/2 – s_2) = 0$ すなわち $s_2 = h/2$ で $Q$ が極大になることから確認できます。中立軸より下では $y$ が負になり寄与が減り始めるため、$q$ は対称的に減少して下フランジの自由端で再びゼロに戻ります。
連続性とアナロジー
フランジからウェブへ移るとき、接合点でせん断流の値が連続している(どちらも $q_1$)ことに注意してください。これは川の流れが分岐・合流するときに流量が保存されるのと同じで、せん断流もまた連続の条件を満たします。電気回路のキルヒホッフの電流則を知っている人は、せん断流を「電流」、接合点を「節点」と読み替えると理解しやすいでしょう。下フランジは上フランジと上下対称(符号は反転)で、自由端でゼロに戻ります。
ここまででC形断面のせん断流分布が、フランジでは直線、ウェブでは放物線という具体的な形を取ることがわかりました。では、この分布から「断面に働く合せん断力」を計算し、それが作用する位置——せん断中心——を求めていきましょう。
せん断中心の導出
なぜせん断中心が必要なのか
せん断流の分布を見ると、上フランジは右向き、下フランジは左向き、ウェブは下向きという力の流れができています。ウェブに沿った下向きせん断流の合力は、ちょうど作用したせん断力 $V$ につり合います(これは当然で、ウェブが鉛直荷重を担うからです)。問題はフランジです。上下のフランジには互いに逆向きの水平な合力が働き、これらは大きさが等しく向きが反対なので、合力としてはゼロですが、偶力(モーメント) を生みます。
この偶力があるために、もし荷重 $V$ をウェブの中心線上に加えると、フランジの偶力が打ち消されずに残り、断面はねじれてしまいます。ねじれを生まないためには、荷重 $V$ をある特定の点——フランジの偶力をちょうど打ち消す位置——に作用させる必要があります。その点がせん断中心 $e$ です。
せん断中心は次のように定義できます。断面に分布するせん断流の合力(=外力 $V$)のモーメントが、せん断流の各部分が作るモーメントの和に等しくなる作用点。 言い換えれば、外力をせん断中心に作用させればねじれモーメントがゼロになります。
モーメントのつり合いを立てる
ウェブの中央線上の点(または任意の基準点)まわりでモーメントのつり合いを考えます。基準点をウェブ中心線とフランジの交点付近に取ると計算が簡単です。ここではウェブの中央線上の任意点 $O$ を基準にします。
外力 $V$ がせん断中心(基準点 $O$ から水平距離 $e$ の位置)に作用するときの $O$ まわりのモーメントは $V e$ です。一方、断面内のせん断流が作る $O$ まわりのモーメントを計算します。ウェブの下向きせん断流は基準点 $O$ を通る線上にあるためモーメントを作りません(腕の長さがゼロ)。したがって、モーメントを作るのは上下フランジの水平せん断流だけです。
上フランジの合力 $F_f$ を求めます。フランジ内のせん断流を全長にわたって積分すると
$$ F_f = \int_0^b q(s_1)\, ds_1 = \int_0^b \frac{V t h}{2 I}\, s_1 \, ds_1 = \frac{V t h}{2 I}\cdot \frac{b^2}{2} = \frac{V t h b^2}{4 I} $$
積分の各ステップを確認しておきます。被積分関数 $q(s_1) = (Vth/2I)\,s_1$ は $s_1$ の1次関数なので、$0$ から $b$ まで積分すると $s_1^2/2$ を代入して $b^2/2$ となり、係数 $Vth/(2I)$ を掛けて上の結果が得られます。
下フランジには大きさが等しく逆向きの合力 $F_f$ が働きます。上フランジは中立軸の上に距離 $h/2$、下フランジは下に距離 $h/2$ にあるので、この2つの水平力が作る偶力のモーメントは、力 $F_f$ × 偶力の腕 $h$ で
$$ M_{\text{flange}} = F_f \cdot h = \frac{V t h b^2}{4 I}\cdot h = \frac{V t h^2 b^2}{4 I} $$
せん断中心位置の式
外力のモーメント $V e$ と、せん断流が作るモーメント $M_{\text{flange}}$ がつり合う条件から、
$$ V e = M_{\text{flange}} = \frac{V t h^2 b^2}{4 I} $$
両辺を $V$ で割ると、せん断中心のウェブ中心線からの距離 $e$ が求まります。
$$ \begin{equation} e = \frac{t h^2 b^2}{4 I} \end{equation} $$
この式の意味を考えましょう。$e$ は外力 $V$ によらず断面形状だけで決まります($V$ が約分で消えた)。これは「せん断中心は断面に固有の幾何学的な点である」という重要な事実を表しています。荷重の大きさが変わってもせん断中心は動きません。
さらに具体的な値を入れてみましょう。C形断面の断面二次モーメント $I$ は、ウェブ(高さ $h$、板厚 $t$)と2枚のフランジ(幅 $b$、板厚 $t$、中立軸から $h/2$)の寄与の和で、薄肉近似では
$$ I \approx \frac{t h^3}{12} + 2\left[ b t \left(\frac{h}{2}\right)^2 \right] = \frac{t h^3}{12} + \frac{b t h^2}{2} $$
ここで第1項はウェブの自身の断面二次モーメント、第2項は2枚のフランジを平行軸の定理で中立軸へ移した寄与(フランジ自身の厚み方向の慣性は薄肉なので無視)です。これを $e$ の式に代入すると、
$$ e = \frac{t h^2 b^2}{4}\cdot \frac{1}{\dfrac{t h^3}{12} + \dfrac{b t h^2}{2}} = \frac{b^2}{\dfrac{2h}{3} + 2b} = \frac{3b^2}{2(h + 3b)} $$
最後の式変形では、分母分子を $t h^2$ で約分し、さらに分母を整理しました(分母 $h/3 + b$ を $1/2$ で割ると $2h/3 + 2b$)。この簡潔な式 $e = 3b^2 / \{2(h+3b)\}$ は教科書でよく見かけるC形断面のせん断中心位置の公式です。重要なのは、せん断中心が断面の外側(ウェブの開いている側と反対側、すなわちフランジが開いている向きとは逆方向の外)に位置することです。
開断面では、せん断中心は一般に図心と一致しません。これが「C形チャンネルを梁に使うと荷重位置によってねじれる」という現象の正体です。一方、二重対称な断面(I形や箱形など)では、対称性からせん断中心は図心に一致します。次にI形断面を見て、なぜそうなるのかを確認しましょう。
I形断面と対称性によるせん断中心
I形断面は、ウェブを中心に上下フランジが左右対称に張り出しています。曲げ・せん断を受けるとき、上フランジでは中央のウェブ接合点から左右両側に向かってせん断流が分かれて流れ出します(自由端でゼロ)。左右のフランジ半分に働く水平せん断流は大きさが等しく向きが反対なので、合力もモーメントも互いに打ち消し合います。
その結果、I形断面ではフランジが偶力を作らず、ウェブの鉛直せん断流だけが外力 $V$ とつり合います。ウェブはちょうど断面の対称軸上にあるため、ねじれモーメントを生まない作用点はウェブ中心線、すなわち図心と一致します。二重対称断面ではせん断中心と図心が一致するという一般則は、こうした対称性によるキャンセルから理解できます。
このことは設計上とても便利です。I形梁では荷重を図心(ウェブ中心)に加えればねじれが生じないので、せん断中心を特別に意識しなくても済みます。逆に言えば、C形やZ形、L形(アングル)のような非対称・片側対称の断面でこそ、せん断中心の検討が不可欠になるわけです。
ここまで開断面を扱ってきました。開断面では自由端で $q=0$ という明快な境界条件がありました。では、断面が閉じている(ループになっている)箱形断面ではせん断流はどうなるのでしょうか。自由端がないという事実が、計算に新しい難しさをもたらします。
閉断面(箱形)のせん断流
閉断面が難しい理由
C形のような開断面では、壁をたどっていくと必ず自由端にたどり着き、そこで $q=0$ という確実な出発点が得られました。ところが箱形のような閉断面では、壁がループを描いていて自由端が存在しません。せん断流の積分定数(基準値)を決める手がかりがないのです。これは、開断面が一本道の川なら、閉断面は環状の運河のようなもので、「どこから流量を測り始めるか」という基準が自明でないことに対応します。
この不定性を解消するために、閉断面のせん断流を2つの成分に分けて考えます。
- 仮にループのどこか1点を切って開断面にしたときの「開断面せん断流」 $q_{\text{open}}(s) = VQ(s)/I$
- ループ全体に一様に流れる未知の「定常せん断流」 $q_0$(積分定数に相当)
実際のせん断流は両者の和 $q(s) = q_{\text{open}}(s) + q_0$ です。未知数 $q_0$ は、ねじれに関する条件——閉断面が曲げせん断のみを受けてねじれないという条件(あるいはせん断中心まわりの荷重なら正味のねじれ角がゼロという条件)——から決定します。具体的には、ループに沿った単位長さあたりのねじれ寄与 $\oint q\, ds / t$ がゼロになるという条件です。
q₀ を決める条件
薄肉閉断面のねじれ理論によると、せん断ひずみエネルギーから導かれる「ねじれを生まない」条件は
$$ \oint \frac{q(s)}{t(s)}\, ds = 0 $$
です(断面が純粋に曲げせん断だけを受け、付加的なねじれを伴わない場合)。$q = q_{\text{open}} + q_0$ を代入すると
$$ \oint \frac{q_{\text{open}}(s) + q_0}{t(s)}\, ds = 0 $$
$q_0$ は定数なので積分の外に出せて、
$$ q_0 \oint \frac{ds}{t(s)} = -\oint \frac{q_{\text{open}}(s)}{t(s)}\, ds $$
これより
$$ \begin{equation} q_0 = -\frac{\displaystyle\oint \frac{q_{\text{open}}(s)}{t(s)}\, ds}{\displaystyle\oint \frac{ds}{t(s)}} \end{equation} $$
と $q_0$ が決まります。板厚 $t$ が一定なら、分母分子の $t$ が約分され $q_0 = -\langle q_{\text{open}}\rangle$(開断面せん断流の周回平均の符号反転)という見通しのよい形になります。閉断面のせん断流は、開断面の分布に一様なオフセットを足して連続的なループにしたものだ、と理解できます。
閉断面の利点
二重対称な箱形断面では、対称性からせん断中心は図心に一致し、$q_0$ の補正を含めても分布は対称になります。閉断面の最大の利点は、ループを描くせん断流がねじり剛性を劇的に高めることです。開断面(チャンネルやI形)はねじりに極端に弱いのに対し、閉断面はせん断流がループを一周することで大きなねじりモーメントに抵抗できます。航空機の主翼が前桁・後桁・上下外板で「トルクボックス(閉断面)」を構成するのは、まさにこのねじり剛性を得るためです。
ここまでで開断面・閉断面のせん断流とせん断中心の理論が出そろいました。最後に、これらをPythonで実際に計算し、分布を可視化してせん断中心位置を数値的に確かめてみましょう。
Pythonでの実装
実装の方針
ここからは、これまで導いた理論をPythonで具体的に計算します。薄肉断面を「節点で結ばれた直線セグメント(板)」の集合としてモデル化し、各セグメントに沿って $Q(s)$ を数値積分してせん断流 $q(s) = VQ(s)/I$ を求めます。せん断流の合力のモーメントを取ることで、せん断中心位置も数値的に求めます。まずは共通の道具を準備します。
import numpy as np
import matplotlib.pyplot as plt
# 薄肉断面の汎用ソルバ
# セグメント = (始点座標, 終点座標, 板厚)
# 節点座標は図心を原点とする (z 水平, y 鉛直)
def section_properties(nodes, segments):
"""図心まわりの断面積・図心・断面二次モーメント I_zz(水平軸まわり)を計算"""
A = 0.0
Az = 0.0
Ay = 0.0
for (i, j, t) in segments:
p0, p1 = np.array(nodes[i]), np.array(nodes[j])
L = np.linalg.norm(p1 - p0) # セグメント長
a = t * L # セグメント面積
cz, cy = (p0 + p1) / 2 # セグメント重心
A += a
Az += a * cz
Ay += a * cy
zc, yc = Az / A, Ay / A # 図心
return A, zc, yc
このヘルパは各板(セグメント)を薄い長方形とみなし、面積と重心位置から断面全体の図心を計算します。薄肉近似では各板の厚み方向の慣性を無視するため、断面性能は「面積 × 重心距離の2乗」の和(平行軸の定理)で書ける点がポイントです。次に断面二次モーメントとせん断流を計算する関数を作ります。
def inertia_Izz(nodes, segments, yc):
"""中立軸(水平・図心通過)まわりの断面二次モーメント I_zz"""
I = 0.0
for (i, j, t) in segments:
p0, p1 = np.array(nodes[i]), np.array(nodes[j])
L = np.linalg.norm(p1 - p0)
y0, y1 = p0[1] - yc, p1[1] - yc # 図心基準の高さ
# 薄板の自身の慣性 + 平行軸 (解析的に積分)
# I = t * ∫ y(s)^2 ds, y は線形補間
I += t * L * (y0**2 + y0*y1 + y1**2) / 3.0
return I
ここで使った公式 $\int_0^L y(s)^2\,ds = L(y_0^2 + y_0 y_1 + y_1^2)/3$ は、高さ $y$ がセグメント上で $y_0$ から $y_1$ へ線形に変化する($y(s) = y_0 + (y_1-y_0)s/L$)として2乗を積分した結果です。傾いた板も水平な板もこの1本の式で正しく扱えます。これで断面二次モーメント $I$ が用意できました。続いて、各セグメントに沿ってせん断流を積分します。
def shear_flow(nodes, segments, V, I, yc, n=50):
"""各セグメントの開断面せん断流 q(s)=V*Q(s)/I を計算。
自由端(開断面)を q=0 の出発点とし、節点でQを引き継ぐ。"""
qstart = {} # 各セグメント始点でのQ値
results = []
for (i, j, t) in segments:
p0, p1 = np.array(nodes[i]), np.array(nodes[j])
L = np.linalg.norm(p1 - p0)
s = np.linspace(0, L, n)
y0, y1 = p0[1] - yc, p1[1] - yc
y = y0 + (y1 - y0) * s / L # 高さの線形補間
# 始点までに溜まったQ (自由端なら0) + このセグメントの寄与
Q0 = qstart.get(i, 0.0)
Q = Q0 + t * (y0 * s + (y1 - y0) * s**2 / (2 * L))
qstart[j] = Q[-1] # 終点のQを次セグメントへ引き継ぐ
q = V * Q / I # せん断流
pts = p0 + (p1 - p0) * (s / L)[:, None] # 経路上の座標
results.append((pts, q, Q))
return results
この関数は各板の始点から終点へ向かって $Q(s) = Q_0 + t\int y\,ds$ を計算し、節点 $j$ で到達した $Q$ の値を辞書 qstart に保存して次の板へ引き継ぎます。これにより「フランジで溜めた $Q$ をウェブへ持ち越す」という、先ほど手計算で行った連続性が自動的に再現されます。自由端から始まる開断面では qstart の初期値がゼロなので、$q=0$ から積分が始まります。準備が整ったので、C形断面に適用してみましょう。
C形断面のせん断流とせん断中心
# C形(チャンネル)断面: ウェブ高さ h, フランジ幅 b, 板厚 t
h, b, t, V = 200.0, 80.0, 4.0, 1000.0 # 単位: mm, N
# 節点: 0=上フランジ自由端, 1=上隅, 2=下隅, 3=下フランジ自由端
nodes = {0: (b, h/2), 1: (0, h/2), 2: (0, -h/2), 3: (b, -h/2)}
segments = [(0, 1, t), (1, 2, t), (2, 3, t)] # 上フランジ→ウェブ→下フランジ
A, zc, yc = section_properties(nodes, segments)
I = inertia_Izz(nodes, segments, yc)
res = shear_flow(nodes, segments, V, I, yc)
print(f"断面積 A = {A:.1f} mm^2, 図心 z = {zc:.2f} mm")
print(f"断面二次モーメント I = {I:.3e} mm^4")
このコードはC形断面を3本のセグメントで表し、断面性能とせん断流を計算します。図心 $z$ がウェブ側に寄っている(フランジが片側にしかないため)ことが出力からわかります。次に、せん断流が作るモーメントからせん断中心を数値的に求めます。
def shear_center_z(res, V, ref=(0.0, 0.0)):
"""せん断流の z 方向モーメントからせん断中心の水平位置 e を求める。
M = ∮ (Rz*qy - Ry*qz) ... を経路積分。ここでは基準点まわりのモーメント。"""
M = 0.0
z0, y0 = ref
for (pts, q, Q) in res:
# 経路に沿った微小ベクトル
dseg = np.diff(pts, axis=0)
qmid = (q[:-1] + q[1:]) / 2
midpts = (pts[:-1] + pts[1:]) / 2
# 力 dF = q*dl (経路方向), モーメント = r × dF (z軸まわり=面外)
rz = midpts[:, 0] - z0
ry = midpts[:, 1] - y0
dFz = qmid * dseg[:, 0]
dFy = qmid * dseg[:, 1]
M += np.sum(rz * dFy - ry * dFz)
e = M / V # V e = M → e = M/V
return e
e = shear_center_z(res, V, ref=(0.0, 0.0))
# 解析式と比較
e_theory = 3 * b**2 / (2 * (h + 3*b))
print(f"数値計算のせん断中心 e = {e:.3f} mm (ウェブ基準)")
print(f"解析式 e = 3b^2/(2(h+3b)) = {e_theory:.3f} mm")
shear_center_z はせん断流を経路に沿って積分し、基準点(ここではウェブ中心 $z=0$)まわりのモーメント $M = \oint (r \times dF)$ を計算して $e = M/V$ を得ます。出力では数値計算値が解析式 $e = 3b^2/\{2(h+3b)\}$ とよく一致するはずで、これがせん断中心導出の正しさの確認になります。続いて、せん断流分布を断面形状の上に色で重ねて可視化します。
fig, axes = plt.subplots(1, 3, figsize=(15, 5))
def plot_section(ax, res, e, title, web_z=0.0):
for (pts, q, Q) in res:
sc = ax.scatter(pts[:, 0], pts[:, 1], c=np.abs(q),
cmap='viridis', s=25)
# せん断中心 (ウェブから e の位置, 開いた側と逆向き)
ax.scatter([web_z - e], [0], color='red', marker='*', s=300,
zorder=5, label='shear center')
ax.scatter([0], [0], color='black', marker='+', s=150,
zorder=5, label='centroid (web)')
ax.set_aspect('equal'); ax.set_title(title)
ax.set_xlabel('z [mm]'); ax.set_ylabel('y [mm]')
ax.legend(fontsize=8); ax.grid(True, alpha=0.3)
return sc
sc = plot_section(axes[0], res, e, 'C-section: |shear flow|')
fig.colorbar(sc, ax=axes[0], label='|q| [N/mm]')
このプロットでは、せん断流の大きさ $|q|$ を色で表します。色が薄い(小さい)のはフランジの自由端付近、色が濃い(大きい)のはウェブの中立軸付近です。赤い星印がせん断中心で、ウェブから外側へ $e$ だけ離れた、フランジの開いている側とは反対の位置にあることが見て取れます。図心(黒の十字、ウェブ上)とせん断中心が一致しないことが、C形断面の本質的な特徴です。次にI形断面と箱形断面も同じソルバで計算し、3つを並べて比較します。
I形断面と箱形断面の比較
# --- I形断面 (二重対称) ---
# 上フランジは中央のウェブ接合点から左右に分岐するので
# 半分ずつ別セグメントとして扱う
bf, hw, tf = 100.0, 200.0, 4.0
nodes_I = {0: (-bf/2, hw/2), 1: (0, hw/2), 2: (0, -hw/2),
3: (-bf/2, -hw/2), 4: (bf/2, hw/2), 5: (bf/2, -hw/2)}
# 左上フランジ半分→ウェブ→左下、右上→右下 (簡略化のため左半分主体で評価)
segs_I = [(0, 1, tf), (4, 1, tf), (1, 2, tf), (2, 3, tf), (2, 5, tf)]
A_I, zc_I, yc_I = section_properties(nodes_I, segs_I)
I_I = inertia_Izz(nodes_I, segs_I, yc_I)
res_I = shear_flow(nodes_I, segs_I, V, I_I, yc_I)
e_I = shear_center_z(res_I, V, ref=(0.0, 0.0))
print(f"I形: 図心 z={zc_I:.2f}, せん断中心 e={e_I:.3f} mm (≈0 なら図心一致)")
I形断面では、左右のフランジが対称にせん断流を流すため、水平方向のモーメントが打ち消し合い、せん断中心 $e$ がほぼゼロ(図心と一致)になることが出力から確認できます。これは「二重対称断面ではせん断中心が図心に一致する」という理論の数値的な裏付けです。最後に箱形閉断面を計算します。
# --- 箱形断面 (閉断面) ---
# 閉ループ: 上辺→右辺→下辺→左辺。開断面せん断流に q0 オフセットを加える
bw, hb, tb = 120.0, 200.0, 4.0
nodes_B = {0: (-bw/2, hb/2), 1: (bw/2, hb/2),
2: (bw/2, -hb/2), 3: (-bw/2, -hb/2)}
segs_B = [(0, 1, tb), (1, 2, tb), (2, 3, tb), (3, 0, tb)]
A_B, zc_B, yc_B = section_properties(nodes_B, segs_B)
I_B = inertia_Izz(nodes_B, segs_B, yc_B)
res_B = shear_flow(nodes_B, segs_B, V, I_B, yc_B) # まず開断面として
# q0 を計算: q0 * ∮ds/t = -∮ q_open/t ds (t一定なら平均)
num = den = 0.0
for (pts, q, Q) in res_B:
dl = np.linalg.norm(np.diff(pts, axis=0), axis=1)
qmid = (q[:-1] + q[1:]) / 2
num += np.sum(qmid / tb * dl)
den += np.sum(dl / tb)
q0 = -num / den
print(f"箱形: 定常せん断流 q0 = {q0:.3f} N/mm (閉断面補正)")
ここでは箱形を一旦「左辺の中点で切った開断面」として開断面せん断流を求め、その後 $q_0 = -\oint(q_{\text{open}}/t)\,ds / \oint(ds/t)$ で定常せん断流を計算しています。出力される $q_0$ が、開断面分布を連続なループに補正するオフセットです。二重対称な箱形なので、せん断中心は図心に一致します。3断面を並べて可視化しましょう。
# I形と箱形を残りの軸にプロット
sc_I = plot_section(axes[1], res_I, e_I, 'I-section: |shear flow|')
fig.colorbar(sc_I, ax=axes[1], label='|q| [N/mm]')
# 箱形は q0 を加えた値で色付け
res_B_closed = [(pts, q + q0, Q) for (pts, q, Q) in res_B]
sc_B = plot_section(axes[2], res_B_closed, 0.0, 'Box: |shear flow| (closed)')
fig.colorbar(sc_B, ax=axes[2], label='|q| [N/mm]')
plt.tight_layout()
plt.savefig('shear_flow_sections.png', dpi=150, bbox_inches='tight')
plt.show()
3枚並んだ図から、断面形状ごとのせん断流とせん断中心の違いが一目でわかります。C形ではせん断中心が断面外(ウェブの反対側)にあり図心とずれているのに対し、I形と箱形ではせん断中心が図心に一致しています。また箱形では $q_0$ を加えたことでループ全体にせん断流が連続的に流れ、開断面のように自由端でゼロになる箇所がないことが見て取れます。このループ状のせん断流こそ、閉断面の高いねじり剛性の源です。
せん断流分布を1次元で確認する
最後に、C形断面のせん断流を「壁に沿った距離 $s$」の関数として1次元プロットし、フランジで直線・ウェブで放物線という理論通りの形になっているかを確認します。
plt.figure(figsize=(9, 5))
s_offset = 0.0
labels = ['upper flange', 'web', 'lower flange']
for k, (pts, q, Q) in enumerate(res):
s_local = np.linalg.norm(pts - pts[0], axis=1) # 各セグメント内の弧長
s_total = s_offset + s_local
plt.plot(s_total, q, lw=2, label=labels[k])
s_offset = s_total[-1]
plt.axhline(0, color='gray', lw=0.8)
plt.xlabel('arc length s along wall [mm]')
plt.ylabel('shear flow q [N/mm]')
plt.title('C-section shear flow distribution along wall')
plt.legend(); plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('cshape_shear_flow_1d.png', dpi=150, bbox_inches='tight')
plt.show()
この1次元プロットを見ると、上フランジでは $s$ に比例して直線的に増加し、ウェブに入ると放物線を描いて中立軸(ウェブ中央)でピークを迎え、下フランジで再び直線的に減ってゼロに戻る、という分布がはっきり現れます。これは手計算で導いた「フランジは $Q \propto s$ の1次、ウェブは $Q$ が $s$ の2次」という結果と完全に一致しており、せん断流公式 $q = VQ/I$ の妥当性を視覚的に裏付けています。両端(自由端)でちょうどゼロになっている点も、開断面の境界条件が正しく反映されている証拠です。
まとめ
本記事では、薄肉断面のせん断流とせん断中心について、理論の導出からPython実装まで解説しました。
- せん断流 $q = \tau t = VQ/I$ は、曲げモーメントの軸方向変化(=せん断力 $V$)が生む軸方向力の不釣合いを、壁に沿ったせん断応力が補うことから導かれる。微小要素の軸方向つり合いと $dM/dx = V$ が導出の鍵
- 分布の形:せん断流は自由端で $Q=0$ よりゼロ、中立軸で最大。フランジ(高さ一定)では $s$ の1次関数、ウェブ(高さ変化)では2次関数になる
- せん断中心:フランジの偶力をちょうど打ち消す荷重作用点。C形では $e = 3b^2/\{2(h+3b)\}$ と断面形状だけで決まり、図心とは一致しない。荷重をここからずらすとねじれが生じる
- 対称性:I形・箱形のような二重対称断面ではせん断中心が図心に一致する。設計上、非対称断面でこそせん断中心の検討が重要
- 閉断面:自由端がないため積分定数 $q_0$ を $\oint q/t\,ds = 0$ から決める。ループ状せん断流が高いねじり剛性を生み、航空機のトルクボックスに応用される
せん断流とせん断中心は、薄肉構造の強度・剛性設計の根幹をなす概念です。ここで身につけた「断面一次モーメントから応力分布を組み立てる」という考え方は、より進んだ構造力学のトピックへと自然につながっていきます。
次のステップとして、以下の記事も参考にしてください。
- 梁のせん断応力をわかりやすく解説 — 本記事の出発点となるせん断応力公式
- 曲げ応力の理論と導出 — 断面二次モーメントと曲げ応力の基礎