え、干渉縞ってただの模様じゃないの?
そう思ったあなた、実はこの「ただの模様」の中に、光の波の情報が全部詰まっているんです。しかも、この模様を読み解けば、物体のナノメートル単位の変形まで計測できちゃう。
今日は、ブラウザで動く無料ツール「ホログラム干渉縞シミュレーター」を使って、この奥深い世界をコード付きで解説していきます。
ざっくり本質:干渉縞は「波の喧嘩」の記録
まず、直感を掴みましょう。
湖面に2つの石を投げ入れたら、波紋が広がって重なりますよね。山と山が重なると大きな波に、山と谷が重なると打ち消し合って平らになる。
光も全く同じです。
レーザー光のような「波の山と谷が揃った光(コヒーレント光)」を2つ重ねると、場所によって明るくなったり暗くなったりする。それが干渉縞です。
「干渉縞とは、光の波が『どこで強め合い、どこで弱め合うか』を可視化した地図である」
この地図を読み取る技術こそが、ホログラフィの本質なんです。
数式で理解する:たった3つの式で全てが決まる
では、シミュレーターの計算ロジックを数式で押さえましょう。
基本の式:複素振幅の重ね合わせ
まず、観測点 $(x,y)$ における光の複素振幅 $U$ は、$N$ 個の点光源からの寄与の和です:
U(x,y) = \sum_{i=1}^{N}\frac{A_i}{r_i}e^{ikr_i}
- $A_i$ : 光源 $i$ の振幅(明るさ)
- $r_i$ : 観測点から光源 $i$ までの距離
- $k = 2\pi/\lambda$ : 波数(波長 $\lambda$ に反比例)
「距離が違うと位相がずれる」 これが全ての始まりです。
強度の式:実際に見える明るさ
人間の目やカメラで見えるのは強度(振幅の2乗) です:
I(x,y) = \sum_i A_i^2 + 2\sum_{i < j}A_i A_j \cos\bigl(k(r_i - r_j)\bigr)
第1項は各光源の強度の単純和。第2項が干渉項で、光源間の距離差 $r_i - r_j$ に応じて $\cos$ で変調されます。
これが干渉縞の正体。距離差が波長の整数倍で明るく、半整数倍で暗くなる。
縞の間隔:実務で最も使う式
2点光源の場合、縞の間隔 $\Lambda$ は:
\Lambda = \frac{\lambda}{2\sin\theta}
$\theta$ は2つの光源を観測点から見た角度の半分。
覚えておいてください。 波長を短くするより、光源間の角度を大きくする方が縞は劇的に細かくなります。これ、実務の鉄則です。
コードで実装する:JavaScriptで30行
シミュレーターのコア計算を、実際に動くコードで再現します。
// ホログラム干渉縞 コア計算 (Canvas用)
// 引数: ctx (2Dコンテキスト), sources (光源配列), lambda (波長), width, height
function drawInterferencePattern(ctx, sources, lambda, width, height) {
const k = 2 * Math.PI / lambda; // 波数
const imageData = ctx.createImageData(width, height);
const data = imageData.data;
// 各ピクセルで強度計算
for (let y = 0; y < height; y++) {
for (let x = 0; x < width; x++) {
// 複素振幅の実部・虚部を累積
let realSum = 0, imagSum = 0;
for (const src of sources) {
// 観測点から光源までの距離
const dx = x - src.x;
const dy = y - src.y;
const r = Math.sqrt(dx*dx + dy*dy);
// 振幅減衰 (距離に反比例) + 位相回転
const amp = src.amplitude / (r + 1e-10); // ゼロ割防止
const phase = k * r;
realSum += amp * Math.cos(phase);
imagSum += amp * Math.sin(phase);
}
// 強度 = |U|^2 = real^2 + imag^2
const intensity = realSum*realSum + imagSum*imagSum;
// グレースケールにマッピング (0〜255)
const val = Math.min(255, Math.max(0, Math.floor(intensity * 50)));
const idx = (y * width + x) * 4;
data[idx] = val; // R
data[idx+1] = val; // G
data[idx+2] = val; // B
data[idx+3] = 255; // A
}
}
ctx.putImageData(imageData, 0, 0);
}
// 使用例: 2点光源 (波長 500nm, 画面サイズ 400x400)
const sources = [
{ x: 150, y: 200, amplitude: 1.0 },
{ x: 250, y: 200, amplitude: 1.0 }
];
drawInterferencePattern(ctx, sources, 500e-9, 400, 400);
このコードのポイント:
- 複素振幅を実部・虚部で管理 → 後で強度計算に使う
- 距離による振幅減衰を $1/r$ でモデル化
- 波数 $k$ で位相回転 → 波長が短いほど位相変化が急峻に
実際のシミュレーターも、これと同じ原理で動いています。
数値例で確かめる:縞の間隔を手計算
では、具体的な数値で確認しましょう。
条件:
- 波長 $\lambda = 532 ,\text{nm}$(グリーンレーザー)
- 2つの光源の間隔 $D = 10 ,\text{mm}$
- 観測スクリーンまでの距離 $z = 1 ,\text{m}$
ステップ1:角度を求める
光源間の角度 $2\theta$ は、スクリーンから見た角度:
\tan(2\theta) \approx 2\theta = \frac{D}{z} = \frac{10\,\text{mm}}{1000\,\text{mm}} = 0.01 \,\text{rad}
よって $\theta = 0.005 ,\text{rad}$
ステップ2:縞の間隔を計算
\Lambda = \frac{\lambda}{2\sin\theta} \approx \frac{532 \times 10^{-9}}{2 \times 0.005} = 5.32 \times 10^{-5} \,\text{m} = 53.2 \,\mu\text{m}
つまり、約0.05mm間隔で明暗が繰り返す。
コードでこの条件を入力すると、確かに画面上で約53ピクセル(1ピクセル=1μmと仮定)間隔の縞が現れます。理論と実装が一致しました。
シミュレーターで遊ぶ:3つの実験
実際にツールを開いて、一緒に試しましょう。
実験1:波長を変えてみる
プリセット「2点光源」 を選択。波長スライダーを400nm(青)→ 700nm(赤) に動かす。
- 何が起きる? 縞の間隔が広がる
- なぜ? $\Lambda = \lambda / (2\sin\theta)$ の $\lambda$ が大きくなるから
- 実務の教訓: 赤いレーザー(He-Ne, 632.8nm)より青いレーザー(Ar, 488nm)の方が細かい計測ができる
実験2:光源の間隔を変える
光源1を左に、光源2を右にドラッグ。間隔を50px → 200px に拡大。
- 何が起きる? 縞が劇的に細かくなる
- なぜ? 角度 $\theta$ が大きくなり、$\sin\theta$ が増加 → $\Lambda$ が減少
- 実務の教訓: 波長より幾何学的配置の影響が圧倒的に大きい。干渉計測では光源の位置決めが命
実験3:ゾーンプレートでレンズ効果を体感
プリセット「ゾーンプレート4源」 を選択。光源数を4→8→16と増やす。
- 何が起きる? 中心に明るいスポットが現れ、周囲に同心円状の縞
- なぜ? 多数の点光源からの光が中心で強め合う → レンズのように集光
- 実務の応用: これがゾーンプレートレンズ。X線顕微鏡など、ガラスレンズが使えない波長域で活躍
現場でハマるポイント:3つの落とし穴
1. コヒーレンスを忘れるな
シミュレーターは全ての光源が完全にコヒーレントと仮定。でも現実のLEDや太陽光では干渉縞は見えません。
対策: 干渉実験には必ずレーザーを使う。単一波長・同位相が絶対条件。
2. コントラストは強度バランスで決まる
振幅を「メイン光源10、他1」にしてみてください。干渉縞がほとんど見えなくなりますよね?
理由: 強度の式の第1項(各光源の強度和)が大きくなり、干渉項の変調が相対的に小さくなるから。
実務の教訓: ホログラム記録では参照光と物体光の強度比を1:1〜1:3に調整する。これが守れないと、再生像がぼやける。
3. スケール感覚を誤るな
波長を400nmから700nmに変えても、縞の変化は「少し」。でも光源間距離を1mmから10mmに変えると、縞は10倍細かくなる。
覚えておくべき順序:
- 光源の幾何学的配置(角度・距離)が最も効く
- 次に波長
- 最後に振幅バランス
シミュレーターでパラメータを大胆に振って、この感覚を身につけてください。
まとめ:今日の3つの要点
-
干渉縞は「光路差の地図」 — 距離差が波長の整数倍で明るく、半整数倍で暗くなる。この原理でナノメートル計測が可能。
-
実装の核心はたった30行のJavaScript — 複素振幅を足し合わせて強度を計算。シミュレーターもこれと同じ原理。
-
実務で最も効くパラメータは「角度」 — 波長より幾何学的配置の影響が圧倒的に大きい。自由にパラメータを動かして感覚を掴め。
今日紹介したツール:
▶ ホログラム干渉縞シミュレーター — ブラウザで即動作、登録不要
光源をドラッグして縞がリアルタイムに変化する様子を、ぜひ自分の手で体感してください。数式とコードで理解した原理が、目で見える形で確かめられる — これが最速の学び方です。
NovaSolverでは700以上の工学シミュレーターを無料公開中 👉 一覧はこちら