光学機器はレンズ、ミラー、プリズム、フィルターなどの光学素子を組み合わせて構成されます。本記事では、レンズ以外の基本的な光学素子であるプリズム、球面鏡、光学フィルターの原理を取り上げます。
これらの素子の理解は、分光器、望遠鏡、レーザー光学系、光通信など幅広い分野の基盤となります。
本記事の内容
- プリズムによる分散と偏角
- 最小偏角の条件と屈折率の測定
- 全反射プリズムの原理
- 球面鏡の結像公式
- 光学フィルターの基本原理
- Pythonでの可視化
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
プリズムによる分散
プリズムの偏角
三角柱のプリズムに光を入射させると、2回の屈折を経て光は元の方向から偏角 $\delta$ だけ曲がって出射します。
頂角 $A$ のプリズムに入射角 $\theta_1$ で光が入射する場合を考えます。第1面での屈折(スネルの法則):
$$ n_1 \sin\theta_1 = n \sin\theta_1′ $$
ここで $n_1$ は外部媒質(通常は空気、$n_1 = 1$)の屈折率、$n$ はプリズムの屈折率、$\theta_1’$ は第1面での屈折角です。
プリズム内部の幾何学から、第2面への入射角 $\theta_2’$ は:
$$ \theta_1′ + \theta_2′ = A $$
すなわち $\theta_2′ = A – \theta_1’$ です。
第2面での屈折:
$$ n \sin\theta_2′ = n_1 \sin\theta_2 $$
偏角 $\delta$ は入射光と出射光のなす角であり:
$$ \boxed{\delta = (\theta_1 – \theta_1′) + (\theta_2 – \theta_2′) = \theta_1 + \theta_2 – A} $$
この式は、プリズム内での光路が2回の屈折でどれだけ曲げられたかを表しています。
分散
屈折率 $n$ は波長 $\lambda$ に依存します(分散)。可視光域では一般に短い波長ほど屈折率が大きく(正常分散):
$$ \frac{dn}{d\lambda} < 0 $$
このため、白色光をプリズムに通すと波長ごとに偏角が異なり、スペクトルに分離されます。青色光(短波長)は赤色光(長波長)より大きく屈折します。
分散能は角分散 $d\delta / d\lambda$ で定量化されます:
$$ \frac{d\delta}{d\lambda} = \frac{d\delta}{dn}\frac{dn}{d\lambda} $$
$d\delta/dn$ はプリズムの形状で決まる幾何学的因子、$dn/d\lambda$ は材料固有の分散特性です。
コーシーの分散式
ガラスの分散を近似する経験式として、コーシーの分散式があります:
$$ \boxed{n(\lambda) = A + \frac{B}{\lambda^2} + \frac{C}{\lambda^4} + \cdots} $$
$A$, $B$, $C$ は材料固有の定数です。短波長ほど $n$ が大きくなることが分かります。
最小偏角の条件
偏角の最小値
入射角 $\theta_1$ を変化させると偏角 $\delta$ は変化し、ある入射角で最小偏角 $\delta_{\min}$ を取ります。
最小偏角の条件を求めます。$\delta = \theta_1 + \theta_2 – A$ で $d\delta / d\theta_1 = 0$ とすると:
$$ 1 + \frac{d\theta_2}{d\theta_1} = 0 $$
スネルの法則を微分して解析すると、最小偏角は光路がプリズムに対して対称になるとき($\theta_1 = \theta_2$、$\theta_1′ = \theta_2’$)に実現されることが示されます。
対称条件 $\theta_1 = \theta_2$ のとき、$\delta = 2\theta_1 – A$ なので:
$$ \theta_1 = \frac{\delta_{\min} + A}{2} $$
また $\theta_1′ = \theta_2′ = A/2$ です。スネルの法則に代入すると:
$$ \sin\frac{\delta_{\min} + A}{2} = n \sin\frac{A}{2} $$
$$ \boxed{n = \frac{\sin\dfrac{\delta_{\min} + A}{2}}{\sin\dfrac{A}{2}}} $$
この関係式は、プリズムの頂角 $A$ と最小偏角 $\delta_{\min}$ の測定から屈折率 $n$ を高精度で決定する方法を与えます。これがプリズム分光計による屈折率測定の原理です。
対称条件の証明
$\delta = \theta_1 + \theta_2 – A$ において、$\theta_1′ + \theta_2′ = A$(一定)という拘束条件のもとで $\delta$ が極値を取る条件を求めます。
第1面でのスネルの法則を $\theta_1$ で微分すると:
$$ \cos\theta_1 = n\cos\theta_1′ \cdot \frac{d\theta_1′}{d\theta_1} $$
$\theta_2′ = A – \theta_1’$ より $d\theta_2′ / d\theta_1 = -d\theta_1′ / d\theta_1$。第2面のスネルの法則を $\theta_1$ で微分すると:
$$ n\cos\theta_2′ \cdot \frac{d\theta_2′}{d\theta_1} = \cos\theta_2 \cdot \frac{d\theta_2}{d\theta_1} $$
$d\delta/d\theta_1 = 0$ すなわち $d\theta_2/d\theta_1 = -1$ を代入し、上の2式を組み合わせると:
$$ \frac{\cos\theta_1}{n\cos\theta_1′} = \frac{n\cos\theta_2′}{\cos\theta_2} $$
$$ \cos\theta_1 \cos\theta_2 = n^2 \cos\theta_1′ \cos\theta_2′ $$
スネルの法則 $\sin\theta_1 = n\sin\theta_1’$, $n\sin\theta_2′ = \sin\theta_2$ を用いて:
$$ \cos\theta_1 \cos\theta_2 = n^2 \cos\theta_1′ \cos\theta_2′ $$
この等式と $\sin^2\theta + \cos^2\theta = 1$ の関係から、$\theta_1 = \theta_2$(したがって $\theta_1′ = \theta_2’$)が導かれます。
全反射プリズム
全反射の条件
光が屈折率の大きい媒質 $n_1$ から小さい媒質 $n_2$ に入射する場合、入射角が臨界角 $\theta_c$ を超えると全反射が起こります:
$$ \boxed{\theta_c = \arcsin\frac{n_2}{n_1}} $$
ガラス($n \approx 1.5$)から空気($n = 1$)への臨界角は:
$$ \theta_c = \arcsin\frac{1}{1.5} \approx 41.8° $$
全反射プリズムの利用
直角二等辺三角形のプリズム($45°$-$45°$-$90°$)では、$45° > 41.8°$ なので斜辺で全反射が起こります。全反射プリズムの利点は以下の通りです:
- 金属鏡に比べて光の損失が極めて小さい(理論上100%反射)
- 経年劣化がほとんどない
- 光路を90°または180°曲げることができる
ポロプリズム(双眼鏡に使用)では、2つの全反射プリズムを組み合わせて像の上下左右を反転させます。
ペンタプリズム(一眼レフカメラに使用)は、五角形断面のプリズムで光路を正確に90°曲げます。
レトロリフレクター(コーナーキューブ)は、3面の全反射面を直交に配置し、どの方向から入射しても光を入射方向に正確に戻します。月面に設置されたレーザー反射鏡がこの原理です。
球面鏡の結像
凹面鏡の結像公式
曲率半径 $R$ の凹面鏡について、近軸近似(paraxial approximation)のもとで結像公式を導出します。
鏡の中心を原点、光軸を $z$ 軸とします。物体距離を $s$(正)、像距離を $s’$(正)、焦点距離を $f$ とします。
球面鏡の頂点 $V$ から物体 $P$ までの距離を $s$、像 $P’$ までの距離を $s’$ とし、曲率中心 $C$ までの距離を $R$ とします。
鏡面上の点 $Q$ について、三角形 $PQC$ と $P’QC$ に対して反射の法則(入射角=反射角)を適用します。近軸近似($\sin\alpha \approx \alpha$, $\tan\alpha \approx \alpha$)のもとで:
$$ \frac{h}{s} + \frac{h}{R} \approx \alpha + \beta $$
$$ \frac{h}{R} + \frac{h}{s’} \approx \beta + \gamma $$
ここで $h$ は光軸からの高さ、$\alpha, \beta, \gamma$ はそれぞれ $P$, $C$, $P’$ から見た $Q$ の角度です。反射の法則から入射角 = 反射角なので:
$$ \alpha + \beta = \beta + \gamma $$
これを $s, s’, R$ で表すと:
$$ \frac{1}{s} + \frac{1}{s’} = \frac{2}{R} $$
焦点距離は $f = R/2$ なので(平行光線が $R/2$ の位置に集光することから):
$$ \boxed{\frac{1}{s} + \frac{1}{s’} = \frac{1}{f} = \frac{2}{R}} $$
これが球面鏡の結像公式です。レンズの結像公式 $1/s + 1/s’ = 1/f$ と同じ形ですが、$f = R/2$ という関係が球面鏡固有です。
凸面鏡
凸面鏡では $R < 0$(曲率中心が鏡の背後)として同じ公式が成り立ちます。焦点距離は $f = R/2 < 0$ となり、常に虚像を生じます。
横倍率
$$ m = -\frac{s’}{s} $$
$m < 0$ で倒立像、$m > 0$ で正立像です。
球面収差
近軸近似を外れる(光軸から離れた光線)と、反射点によって集光位置がずれます。これが球面収差です。放物面鏡を用いると球面収差は解消されます。反射望遠鏡(ニュートン式、カセグレン式)には放物面主鏡が使われます。
光学フィルターの基本原理
吸収フィルター
特定の波長域を選択的に吸収するガラスや色素を用いたフィルターです。ランバート・ベールの法則に従います:
$$ \boxed{I(\lambda) = I_0(\lambda) \exp\left(-\alpha(\lambda) d\right)} $$
ここで $\alpha(\lambda)$ は波長 $\lambda$ での吸収係数、$d$ はフィルターの厚さです。透過率は:
$$ T(\lambda) = \frac{I(\lambda)}{I_0(\lambda)} = \exp\left(-\alpha(\lambda) d\right) $$
干渉フィルター
薄膜の多重干渉を利用して、特定の波長だけを透過させるフィルターです。2枚の半透鏡の間に厚さ $d$、屈折率 $n$ のスペーサー層を挟んだ構造(ファブリ・ペロー型)で、透過のピーク波長は:
$$ \boxed{m\lambda = 2nd\cos\theta \quad (m = 1, 2, 3, \ldots)} $$
ここで $\theta$ はスペーサー層内での光の角度、$m$ は次数です。
透過帯域幅(半値全幅、FWHM)は反射率 $\mathcal{R}$ に依存し:
$$ \Delta\lambda \approx \frac{\lambda^2(1-\mathcal{R})}{2\pi n d \sqrt{\mathcal{R}}} $$
反射率 $\mathcal{R}$ を上げるほど狭帯域になります。
ダイクロイックフィルター(ダイクロイックミラー)
誘電体多層膜を用いて、特定の波長域を反射し、それ以外を透過させるフィルターです。蛍光顕微鏡の励起光と蛍光の分離、プロジェクターのRGB分光など、精密な波長分離が必要な場面で広く使われます。
NDフィルター(減光フィルター)
波長に依存せず光の強度を均一に減衰させるフィルターです。光学濃度 $D$ で特性が表されます:
$$ D = -\log_{10} T = \log_{10}\frac{I_0}{I} $$
ND1は透過率10%(1段、$1/10$減光)、ND2は透過率1%です。
Pythonでの可視化
import numpy as np
import matplotlib.pyplot as plt
fig, axes = plt.subplots(2, 2, figsize=(14, 11))
# --- (1) プリズムの偏角 vs 入射角 ---
A_deg = 60 # 頂角
A = np.radians(A_deg)
n = 1.5
theta1_deg = np.linspace(30, 85, 500)
theta1 = np.radians(theta1_deg)
# 偏角の計算
theta1_prime = np.arcsin(np.sin(theta1) / n)
theta2_prime = A - theta1_prime
# 第2面で全反射しない条件
valid = np.sin(theta2_prime) * n <= 1.0
theta2 = np.where(valid, np.arcsin(n * np.sin(theta2_prime)), np.nan)
delta = theta1 + theta2 - A
delta_deg = np.degrees(delta)
axes[0, 0].plot(theta1_deg, delta_deg, 'b-', lw=2.5)
# 最小偏角
delta_min_idx = np.nanargmin(delta_deg)
axes[0, 0].plot(theta1_deg[delta_min_idx], delta_deg[delta_min_idx], 'ro', ms=10,
label=f'$\\delta_{{min}} = {delta_deg[delta_min_idx]:.1f}°$')
axes[0, 0].axhline(delta_deg[delta_min_idx], color='r', ls='--', alpha=0.5)
axes[0, 0].set_xlabel(r'Incident angle $\theta_1$ [deg]')
axes[0, 0].set_ylabel(r'Deviation angle $\delta$ [deg]')
axes[0, 0].set_title(f'Prism deviation ($A={A_deg}°$, $n={n}$)', fontsize=13)
axes[0, 0].legend(fontsize=12)
axes[0, 0].grid(True, alpha=0.3)
# --- (2) コーシー分散とプリズム分散 ---
lam = np.linspace(380, 780, 500) # nm
# BK7ガラスの近似パラメータ
A_cauchy = 1.5046
B_cauchy = 4.2e3 # nm^2
C_cauchy = 0 # 簡易版
n_lam = A_cauchy + B_cauchy / lam**2
# 各波長での最小偏角
A_prism = np.radians(60)
delta_min_lam = 2 * np.arcsin(n_lam * np.sin(A_prism / 2)) - A_prism
delta_min_lam_deg = np.degrees(delta_min_lam)
# 波長→色
colors_nm = np.array([380, 450, 500, 550, 600, 650, 700, 780])
colors_rgb = ['#8B00FF', '#0000FF', '#00FFFF', '#00FF00', '#FFFF00', '#FF8C00', '#FF0000', '#8B0000']
ax2t = axes[0, 1].twinx()
axes[0, 1].plot(lam, n_lam, 'b-', lw=2.5, label='$n(\\lambda)$')
ax2t.plot(lam, delta_min_lam_deg, 'r-', lw=2, label=r'$\delta_{min}(\lambda)$')
axes[0, 1].set_xlabel('Wavelength $\\lambda$ [nm]')
axes[0, 1].set_ylabel('Refractive index $n$', color='b')
ax2t.set_ylabel(r'Minimum deviation $\delta_{min}$ [deg]', color='r')
axes[0, 1].set_title('Dispersion (Cauchy model, BK7-like)', fontsize=13)
axes[0, 1].grid(True, alpha=0.3)
# --- (3) 球面鏡の結像 ---
R = 20 # cm
f = R / 2
s_values = np.linspace(f + 0.5, 100, 500) # 物体距離(焦点より遠い実物体)
s_prime = 1 / (1/f - 1/s_values)
m = -s_prime / s_values
axes[1, 0].plot(s_values, s_prime, 'b-', lw=2.5, label="Image distance $s'$")
axes[1, 0].axhline(f, color='gray', ls=':', alpha=0.5, label=f'$f = {f}$ cm')
axes[1, 0].axvline(f, color='gray', ls=':', alpha=0.5)
axes[1, 0].set_xlabel('Object distance $s$ [cm]')
axes[1, 0].set_ylabel("Image distance $s'$ [cm]")
axes[1, 0].set_title(f'Concave mirror imaging ($R={R}$ cm, $f={f}$ cm)', fontsize=13)
axes[1, 0].set_xlim(0, 60)
axes[1, 0].set_ylim(0, 60)
axes[1, 0].legend(fontsize=11)
axes[1, 0].grid(True, alpha=0.3)
# --- (4) 干渉フィルターの透過特性 ---
# ファブリ・ペロー型干渉フィルターの透過率
lam_range = np.linspace(400, 700, 1000) # nm
d_spacer = 250 # nm
n_spacer = 1.5
theta = 0 # 垂直入射
R_values = [0.7, 0.85, 0.95]
for R_val in R_values:
# エアリー関数
phase = (4 * np.pi * n_spacer * d_spacer * np.cos(theta)) / lam_range
F = 4 * R_val / (1 - R_val)**2
T_fp = 1 / (1 + F * np.sin(phase / 2)**2)
axes[1, 1].plot(lam_range, T_fp, lw=2,
label=f'$\\mathcal{{R}} = {R_val}$')
axes[1, 1].set_xlabel('Wavelength $\\lambda$ [nm]')
axes[1, 1].set_ylabel('Transmittance $T$')
axes[1, 1].set_title('Fabry-Perot interference filter', fontsize=13)
axes[1, 1].legend(fontsize=11)
axes[1, 1].grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
左上のグラフでは、プリズムの偏角が入射角に対して極小値(最小偏角)を持つことが確認できます。右上ではコーシーの分散モデルにより短波長ほど屈折率が大きいことが示されています。左下では凹面鏡の結像について、物体距離が焦点距離に近づくと像距離が発散する振る舞いが可視化されています。右下では干渉フィルターの反射率を上げると透過帯域幅が狭くなり、波長選択性が向上することが分かります。
まとめ
本記事では、プリズム、球面鏡、光学フィルターの基本原理を解説しました。
- プリズムの偏角: $\delta = \theta_1 + \theta_2 – A$
- 最小偏角と屈折率: $n = \sin\frac{\delta_{\min}+A}{2} / \sin\frac{A}{2}$
- 全反射プリズム: $\theta_c = \arcsin(n_2/n_1)$ を利用した高効率反射
- 球面鏡: $1/s + 1/s’ = 2/R$, 焦点距離 $f = R/2$
- 干渉フィルター: $m\lambda = 2nd\cos\theta$ による波長選択
次のステップとして、以下の記事も参考にしてください。