写真の物理学 ① 光の直進と薄肉レンズの結像

Share
📐
写真の物理学シリーズ ①
このシリーズでは、写真にまつわる現象を物理学の言葉で記述する。「なんとなくそうなる」を「なぜそうなるか」に変換することが目的である。

写真はすべて、光がレンズを通り抜けて像を結ぶところから始まる。では光はなぜ直進し、なぜレンズで曲がるのか。本稿ではフェルマーの原理から出発し、スネルの法則を経て、薄肉レンズの結像公式 $1/f = 1/a + 1/b$ を第一原理で組み立てる。この式が、以降すべての回の土台になる。

フェルマーの原理

光はなぜ直進するのか。なぜ境界面で折れ曲がるのか。これらの問いに統一的な答えを与えるのが、ピエール・ド・フェルマーが1662年に定式化した最小時間の原理(フェルマーの原理)である。

光は、二点間を結ぶあらゆる経路のうち、所要時間が停留値をとる経路を通る。

「停留値」とは、経路をわずかに変えても所要時間がほとんど変化しない状態を指す。多くの場合これは最小値と一致するため「最小時間の原理」とも呼ばれるが、厳密には極大や鞍点の場合もありうる。本シリーズで扱う範囲では、最小値と考えて差し支えない。

均一な媒質中では光速は一定だから、所要時間を最小にする経路は最短距離、すなわち直線になる。光の直進性は、フェルマーの原理の直接的な帰結である。

光の速さは媒質ごとに異なる。真空中の光速を $c$ 、媒質中の光速を $v$ とすると、その媒質の屈折率 $n$ は次のように定義される。

$$ n = \frac{c}{v} $$

屈折率が大きい媒質ほど光は遅い。空気の屈折率はほぼ 1.0、水は約 1.33、光学ガラスはクラウンガラスで 1.5 前後、フリントガラスでは 1.7 から 1.9 程度の値をとる。

スネルの法則の導出

フェルマーの原理を使って、異なる媒質の境界面における屈折の法則を導出する。

屈折率 $n_1$ の媒質中の点Aから、屈折率 $n_2$ の媒質中の点Bへ光が進む状況を考える。境界面は水平な平面とし、点Aは境界面の上方で高さ $h_1$ の位置に、点Bは境界面の下方で高さ $h_2$ の位置にある。AとBの水平距離を $d$ とし、光が境界面と交わる点のAからの水平距離を $x$ とする。

光がA → 境界点 → Bと進む所要時間 $t$ は

$$ t = \frac{n_1 \sqrt{h_1^2 + x^2}}{c} + \frac{n_2 \sqrt{h_2^2 + (d - x)^2}}{c} $$

フェルマーの原理により、 $t$ が停留値をとる $x$ を求める。 $t$ を $x$ で微分して 0 と置くと

$$ \frac{dt}{dx} = \frac{1}{c} \left( \frac{n_1 \, x}{\sqrt{h_1^2 + x^2}} - \frac{n_2 \, (d - x)}{\sqrt{h_2^2 + (d - x)^2}} \right) = 0 $$

ここで幾何学を確認する。入射角 $\theta_1$ は光線と境界面の法線がなす角であるから

$$ \sin \theta_1 = \frac{x}{\sqrt{h_1^2 + x^2}} $$

同様に、屈折角 $\theta_2$ について

$$ \sin \theta_2 = \frac{d - x}{\sqrt{h_2^2 + (d - x)^2}} $$

これを停留条件に代入すると

$$ n_1 \sin \theta_1 = n_2 \sin \theta_2 $$

これがスネルの法則(屈折の法則)である。ヴィレブロルト・スネルが1621年に実験的に見出し、ルネ・デカルトが1637年に『屈折光学』で公表した法則が、フェルマーの原理の帰結として演繹的に導かれた。なお、歴史的にはイブン・サフルが984年にすでに同等の法則を発見していたことが知られている。

スネルの法則は屈折の全てを支配する。レンズの結像も、プリズムによる分光も、蜃気楼も、すべてこの一本の式から導かれる。

近軸近似

スネルの法則は厳密だが、レンズの結像を代数的に扱うにはもう一つの道具が要る。近軸近似(paraxial approximation)である。

光線が光軸となす角 $\theta$ が十分に小さいとき( $\theta$ の単位はラジアン)、三角関数は次のように近似できる。

$$ \sin \theta \approx \theta, \quad \tan \theta \approx \theta, \quad \cos \theta \approx 1 $$

この近似の精度は高い。 $\theta = 10°$(約 0.17 rad)の場合、 $\sin \theta = 0.1736$ に対して $\theta = 0.1745$ であり、誤差は約 0.5% にとどまる。 $\theta = 5°$ なら誤差は約 0.13% になる。

近軸近似のもとでは、球面レンズの結像は代数だけで完全に記述できる。この近似を外れる光線、すなわち光軸から大きく離れた領域を通る光線が生じさせるずれが収差であり、収差の物理学(第16回)で体系的に扱う。

薄肉レンズモデルの成立条件

レンズには厚みがある。しかし、レンズの中心部の厚み $d$ が両面の曲率半径 $R_1$ 、 $R_2$ に比べて十分に小さいとき

$$ d \ll |R_1| \quad \text{かつ} \quad d \ll |R_2| $$

レンズの厚みを無視して「厚さゼロの面」として扱うことができる。これが薄肉レンズ(thin lens)モデルである。

薄肉レンズでは、光線はレンズの中心面(主平面)で一度だけ屈折するものとして扱われる。入射側と射出側で主平面の位置が一致するため、幾何学が大幅に単純化される。

実際の写真用レンズは複数のレンズ群で構成されており、厳密には薄肉近似が成り立たない。しかし、結像の本質的な物理を理解するための出発点として、このモデルは極めて有用である。

結像公式の導出

薄肉凸レンズの前方(物体側)に距離 $a$ で高さ $h_o$ の物体を置く。レンズの後方(像側)の距離 $b$ に像が形成されるとする。レンズの焦点距離を $f$ とする。

物体の先端から出た光線のうち、次の2本を追跡する。

光線1(平行光線) 光軸に平行に入射し、レンズ通過後に像側の焦点 $F'$ を通る。この光線はレンズの位置で高さ $h_o$ にあり、焦点 $F'$ の位置(レンズから距離 $f$ )で光軸と交わる。

光線2(中心光線) レンズの中心を通り、偏向されずに直進する。

これら2本が像側で交わる点が像の先端である。

相似三角形からの導出

光線2(中心光線)は物体の先端とレンズ中心と像の先端を結ぶ直線であるから、相似の関係により

$$ \frac{h_i}{h_o} = \frac{b}{a} $$

が成り立つ( $h_i$ は像の高さ)。

光線1について、像側の幾何学を考える。この光線はレンズ面で高さ $h_o$ にあり、焦点 $F'$(レンズから距離 $f$ )で光軸を横切る。焦点 $F'$ から像面(レンズから距離 $b$ )までの区間で再び相似三角形を組むと

$$ \frac{h_i}{h_o} = \frac{b - f}{f} $$

二つの式を等号で結ぶ。

$$ \frac{b}{a} = \frac{b - f}{f} $$

両辺を展開する。

$$ bf = a(b - f) = ab - af $$

$$ bf + af = ab $$

両辺を $abf$ で割ると

$$ \frac{1}{a} + \frac{1}{b} = \frac{1}{f} $$

これが薄肉レンズの結像公式である。物体距離 $a$ と像距離 $b$ と焦点距離 $f$ の間の、最も基本的な関係式だ。初めてのレンズに迷ったらで扱った35mm、50mm、85mmといった数字は、すべてこの $f$ の値である。

横倍率

結像公式から、横倍率 $m$ を定義できる。

$$ m = -\frac{b}{a} $$

負号は、実像が物体に対して上下左右が反転(倒立)することを表す。 $|m| > 1$ なら像は物体より大きく、 $|m| < 1$ なら小さい。 $|m| = 1$ となるのは $a = b = 2f$ のときであり、これは物体がレンズから焦点距離の2倍の位置にある場合に相当する。横倍率の物体距離依存性や画素数との関係は、像倍率の関数的記述(第7回)で展開する。

実像と虚像

凸レンズの前方、焦点より遠い位置( $a > f$ )に物体を置くと、結像公式から $b > 0$ が得られる。光線は実際にレンズの後方で交わり、スクリーンに投影できる。これが実像である。実像は倒立する。カメラのセンサーに結ぶ像がこれだ。

物体を焦点の内側( $a < f$ )に置くと、結像公式から $b < 0$ が得られる。負の $b$ は、光線がレンズの後方では交わらず、あたかもレンズの前方(物体側)から発散しているかのように見えることを意味する。実際に光が集まっているわけではないから、スクリーンに投影はできない。これが虚像である。虚像は正立(物体と同じ向き)で、物体より大きく見える。虫眼鏡で物を拡大して見る仕組みがこれにあたる(人間の眼もまた、水晶体という凸レンズによる結像系である)。

凹レンズの場合は焦点距離 $f < 0$ となり、結像公式から常に $b < 0$ が得られる。凹レンズは単独では虚像のみを形成する。

整理すると次のようになる。

  • 実像 光線が実際に交わる。倒立。 $b > 0$ 。スクリーンやセンサーに映せる
  • 虚像 光線の延長線上に見える。正立。 $b < 0$ 。スクリーンに映せない

レンズメーカーの方程式

焦点距離 $f$ はレンズの形状と材質で決まる。その関係を与えるのがレンズメーカーの方程式である。

まず、屈折率 $n_1$ の媒質と屈折率 $n_2$ の媒質を隔てる曲率半径 $R$ の単一球面での屈折を考える。近軸近似のもとでスネルの法則を適用すると

$$ \frac{n_1}{s} + \frac{n_2}{s'} = \frac{n_2 - n_1}{R} $$

が得られる( $s$ は物体距離、 $s'$ は像距離)。

薄肉レンズは二つの球面からなる。前面(曲率半径 $R_1$ )で空気からガラスへ、後面(曲率半径 $R_2$ )でガラスから空気へ屈折する。空気の屈折率を 1、ガラスの屈折率を $n$ とする。

薄肉近似により、前面が作る中間像の位置がそのまま後面の物体位置になる。二つの面での屈折を順に適用し、中間の像距離を消去すると

$$ \frac{1}{f} = (n - 1) \left( \frac{1}{R_1} - \frac{1}{R_2} \right) $$

これがレンズメーカーの方程式である。

符号規約

光の進行方向(左→右)を正とする。面の曲率中心が光の進行方向側(右側)にあるとき $R > 0$ 、入射側(左側)にあるとき $R < 0$ とする。典型的な両凸レンズでは $R_1 > 0$ 、 $R_2 < 0$ であるから $1/R_1 - 1/R_2 > 0$ となり、 $f > 0$(凸レンズ)が得られる。

この方程式が教えること

  • 屈折率 $n$ が大きいほど、同じ曲率でも焦点距離は短くなる
  • 曲率が急な( $|R|$ が小さい)レンズほど、焦点距離は短くなる
  • レンズの焦点距離は材質( $n$ )と形状( $R_1$ , $R_2$ )だけで決まり、入射光の性質には依存しない(単色光の場合)

ただし、屈折率は波長に依存する(分散)。白色光では波長ごとに焦点距離が異なり、色収差が生じる。これは収差の物理学(第16回)で扱う。

写真レンズにおける無限遠合焦

写真レンズの合焦操作(ピント合わせ)は、物体距離 $a$ に対して結像公式を満たす像距離 $b$ の位置にセンサー面が来るよう、レンズを前後に動かす操作である。

物体が無限遠にあるとき、 $a \to \infty$ であるから $1/a \to 0$ となる。結像公式は

$$ \frac{1}{f} = \frac{1}{b} $$

すなわち $b = f$ 。無限遠の被写体に合焦したとき、像はレンズの後方ちょうど焦点距離 $f$ の位置に形成される。 これが「焦点距離」という名前の由来でもある。焦点とは、無限遠からの平行光線が集まる点のことだ。

レンズを繰り出す(前方に動かす)とセンサーからの距離 $b$ が増加し、結像公式により有限の距離 $a$ にある物体に合焦する。近距離の物体ほど大きな繰り出し量が必要になる(この繰り出しの光学的帰結はマクロ領域の光学で扱う)。物撮りは遠くからで論じたように、物体距離 $a$ は像の幾何学的性質——パースペクティブから被写界深度まで——を支配する最も重要な変数であり、結像公式はその定量的な関係を与えている。

複合レンズへの展望

写真用レンズは単一の薄肉レンズではなく、複数のレンズ群を組み合わせた複合レンズである。では、薄肉レンズの結像公式はどこまで使えるのか。

二枚の薄肉レンズを密着させた場合、合成焦点距離 $f_{\text{合成}}$ は

$$ \frac{1}{f_{\text{合成}}} = \frac{1}{f_1} + \frac{1}{f_2} $$

で与えられる( $f_1$ 、 $f_2$ は各レンズの焦点距離)。密着という条件が満たされる限り、合成系はやはり薄肉レンズの結像公式に従う。

レンズ間に間隔がある場合は、主平面の位置がずれ、薄肉近似は直接には適用できなくなる。しかし、複合レンズ全体を「前側主平面」と「後側主平面」という二つの仮想的な面で代表させることで、結像公式の形式をそのまま保つことができる。これが厚肉レンズ理論(ガウスの結像理論)であり、写真レンズのスペックシートに記載される焦点距離は、この理論における後側主平面からの距離として定義されている。

つまり、 $1/f = 1/a + 1/b$ の形式自体は複合レンズでも有効だ。ただし、 $a$ と $b$ の基準面がレンズの物理的中心ではなく主平面になる点が異なる。この展開は、本シリーズで必要になった時点で詳しく取り上げる。

本シリーズで使う記号と座標系

以降の全回で統一する記号と座標系を定義する。

座標系

光は左から右へ進むものとする。光の進行方向を正の方向とする。

距離と長さ

  • $f$ : 焦点距離(凸レンズで正、凹レンズで負)
  • $a$ : 物体距離(レンズから物体までの距離、正)
  • $b$ : 像距離(レンズから像までの距離、実像で正、虚像で負)
  • $R_1$ , $R_2$ : レンズ各面の曲率半径(本記事の符号規約に従う)
  • $d$ : レンズの中心部の厚み、またはセンサー対角線長(文脈で区別する。なお、スネルの法則の導出では二点間の水平距離として局所的に使用した)
  • $N$ : F値(絞りと有効口径の物理的意味で導入)
  • $m$ : 横倍率

光学量

  • $n$ : 屈折率
  • $c$ : 真空中の光速( $2.998 \times 10^8$ m/s)
  • $\lambda$ : 光の波長(電磁波としての光で導入)
  • $\theta$ : 光線と光軸のなす角、または入射角・屈折角

単位

SI単位系を基本とする。ただし、焦点距離はmm、波長はnmを慣例的に用いる。角度はラジアンを基本とし、度数法を用いる場合は明示する。

まとめ

フェルマーの原理から出発し、次の結果を得た。

  1. 光の直進性はフェルマーの原理の帰結であり、均一媒質中での最短経路は直線となる
  2. フェルマーの原理から微分法によってスネルの法則 $n_1 \sin \theta_1 = n_2 \sin \theta_2$ が導出される
  3. 近軸近似のもとで球面レンズの結像は代数的に扱える
  4. 薄肉レンズの結像公式 $1/f = 1/a + 1/b$ は、物体距離・像距離・焦点距離の基本関係を与える
  5. レンズメーカーの方程式 $1/f = (n - 1)(1/R_1 - 1/R_2)$ により、焦点距離はレンズの形状と材質から決定される
  6. 無限遠合焦では $b = f$ となり、像はちょうど焦点距離の位置に形成される
  7. 複合レンズでも、主平面を基準にすれば結像公式の形式は保存される

この結像公式を基盤にして、電磁波としての光(第2回)で波長・振動数・エネルギーの関係を導く。焦点距離と画角を幾何学で導く(第4回)以降では、焦点距離と画角の関係、センサーサイズとの等価条件(第5回)へと展開していく。シリーズ最終回のすべてを統合するで、ここで敷いた結像の基盤の上に全体を一つの体系として統合する。

Read more

Dependabotの対応が面倒なのでRenovateを導入する

Dependabotくんはある程度の依存関係の更新を通知してくれるが、山のようにprojectを抱えているとなんとも痒いところに手が届かない。 ということで、Renovateを使ってみる。 Build software better, togetherGitHub is where people build software. More than 150 million people use GitHub to discover, fork, and contribute to over 420 million projects.GitHub ここからGitHub Appを入れる。 あとは、指示に従ってポチポチするだけで、超かんたんだった。 感想 自動化最高。

By Sakashita Yasunobu

nodejsのバグを見つけたのでPRを投げてみた

概要 要するに、node --testで特定のバイナリを標準出力に書くと、テストランナーが固まったり、異常終了したりするバグです。 バグ自体は既知のものだったようで、修正がされていました。 test_runner: infinite loop in FileTest#drainRawBuffer when child stdout contains FF 0F followed by large size bytes · Issue #62693 · nodejs/nodeVersion v25.9.0 (also reproduced on v24.14.1 LTS, v22.21.0 LTS, v23.4.0) Platform Darwin 25.

By Sakashita Yasunobu
青空文庫のParser

青空文庫のParser

青空文庫のParserを作ってます。 GitHub - P4suta/aozora: Pure-functional Rust parser for 青空文庫記法 (Aozora Bunko notation): ルビ, 傍点, 縦中横, 外字, 返り点, indent containers, page breaks.Pure-functional Rust parser for 青空文庫記法 (Aozora Bunko notation): ルビ, 傍点, 縦中横, 外字, 返り点, indent containers, page breaks. - P4suta/aozoraGitHubP4suta Rustで作ってますが、配布物はcargoのほかにnpm/pypiでも入手できます Documentation * Playground — try it in

By Sakashita Yasunobu