マガジン

鏡で光を曲げるパズルの物理:反射の法則を画面で確かめる

遊びを見つける

執筆にClaudeを使用しています。

小さな鏡で反射する光が、格子状の盤の上の琥珀色の結晶へ届く光パズルの模型
記事のテーマをもとに制作したAI生成イラスト。

「プリズムの道」は、鏡と色ガラスを使って灯台へ同じ色の光を届ける8ステージの光学パズルです。鏡は「/」と「\」を切り替えられます。切り替えるたびに光の行き先が変わるのは、理科で習う反射の法則が働いているからです。 この記事では、反射の法則が鏡の向きの二択とどう結びつくのかを説明します。そのうえで、作品を開いて自分の目で確かめる手順を設計書の形で示します。確認済みなのは、鏡が「/」と「\」の切り替えであること、色ガラスがあること、戻す・一歩だけのヒント・最少回転の記録があることです。光が画面上をどんな線で描かれるかなど、これ以外の細部は作品を開いて確かめる前提で進めます。 先に問いを一つ置きます。鏡の向きが二種類しかないパズルで、光の曲がり方は何通りあるでしょうか。反射の法則を使うと、紙の上で答えが出ます。その答えが画面と合うかどうかが、この記事で確かめることです。

この記事の目次
  1. 反射の法則は「法線から測った二つの角が等しい」だけ
  2. 45度の鏡は、光を必ず90度曲げる
  3. プリズムの道で確かめることを決める
  4. 画面の外で確かめる:数行のコード
  5. 灯台から逆にたどる:光の道は逆向きでも同じ
  6. 色ガラスは反射とは別の仕組み
  7. 次の行動

反射の法則は「法線から測った二つの角が等しい」だけ

反射の法則は、次の一文にまとまります。入射角と反射角は等しい、というものです。

角度の測り方には約束があります。鏡の面に垂直な線を「法線」と呼び、光が来る向きと法線のあいだの角を入射角、光が去る向きと法線のあいだの角を反射角とします。入射する光線、反射する光線、法線は、同じ平面の上に並びます。

測る基準が鏡の面ではなく法線である点は、取り違えやすいところです。光が鏡の面にかすめるように当たると、法線から測った入射角は大きくなります。真正面から当たれば入射角は0度で、光は来た道をそのまま戻ります。

曲がる角度は、入射角をθとすると、進行方向が 180度 − 2θ だけ変わります。θが0度なら180度、つまり逆戻りです。θが45度なら90度、つまり直角に曲がります。パズルで鏡が45度に置かれていれば、この「90度」が使えます。

45度の鏡は、光を必ず90度曲げる

「/」と「\」の二択という設計から、読み取れることがあります。

  • 鏡の向きは連続的に回すのではなく、二つの状態を行き来する。
  • 最少回転の記録は、切り替えの回数として数えられる。

鏡の傾きが二種類だけなら、光の進み方は表にまとめられます。もし光が上下左右の四方向だけに進み、鏡が45度に傾いているなら、予測は次のとおりです。これは理論上の予測で、作品の画面で確かめた結果ではありません。

  • 右へ、「/」に当たると:上へ、「\」に当たると:下へ
  • 左へ、「/」に当たると:下へ、「\」に当たると:上へ
  • 上へ、「/」に当たると:右へ、「\」に当たると:左へ
  • 下へ、「/」に当たると:左へ、「\」に当たると:右へ

どの行でも、向きが90度変わっています。同じ向きから来た光でも、「/」か「\」かで曲がる方向が正反対になります。パズルの面白さは、この二択を何枚も重ねたときに、光の道が大きく変わるところにあると読み取れます。

光が上下左右以外にも進むのか、鏡の裏側に当たったらどうなるのかは、この表からは決まりません。「この部分は作品を開いて確かめる」項目として、次の節で扱います。

プリズムの道で確かめることを決める

表を作品の画面と照らし合わせる手順を、設計書の形で示します。

問い:鏡に当たる光の曲がり方は、45度の鏡の表と一致するでしょうか。

準備するもの:紙とペン、「プリズムの道」。最初は序盤のステージで構いません。

手順

  1. ステージを開き、光が通る経路上の鏡を一つ選びます。
  2. その鏡に光が入ってくる向きを、画面の上下左右で紙に書きます。
  3. 鏡の向きを「/」にした状態で、光が出ていく向きを書きます。
  4. 同じ鏡を「\」に切り替え、出ていく向きを書きます。
  5. 経路上の別の鏡でも、2〜4を繰り返します。

記録の単位:鏡一つにつき、「入る向き・鏡の種類・出る向き」を1行にします。一つの鏡で「/」と「\」の2行ができます。最低でも異なる入る向きを2通り含めて記録します。

結果の読み方

  • 全部の行で向きが90度変わり、先の表と一致するなら、鏡は45度の鏡として動いていると考えられます。
  • 一致しない行があるなら、光が斜めにも進むのか、鏡の裏側の扱いが違うのか、別の仕組みが入っているのかを疑います。その場合は、自分の表を作品側の描き方に合わせて作り直してください。
  • 90度ではない曲がり方が見つかっても、反射の法則が破れたとは限りません。鏡の角度が違えば、法則は同じでも曲がる角度は変わります。

起こりやすい誤り

  • 光線の見た目の矢印と、進む向きを混同してしまうこと。出ていく向きは、鏡を通過した後の線で判断します。
  • 鏡の「/」「\」の表示と、実際に光が当たる面を取り違えること。光がどちら側から当たったかも記録に加えます。
  • 画面の拡大や縮小で線の位置が見づらくなること。迷ったら拡大して確認します。

画面の外で確かめる:数行のコード

表を自分で導きたい人向けに、反射の公式を試せる小さなコードを示します。作品の内部実装を写したものではなく、あくまで反射の法則の確認用です。

反射後の向き r は、入射の向き d と鏡の法線 n(長さ1)から、r = d − 2(d·n)n で求まります。「d·n」は内積です。

html
<script>
// 画面座標: x は右が正、y は下が正
const normals = { "/": [1, 1], "\\": [1, -1] };
function reflect(d, key) {
  const [nx, ny] = normals[key];
  const len = Math.hypot(nx, ny);
  const ux = nx / len, uy = ny / len;
  const dot = d[0] * ux + d[1] * uy;
  return [d[0] - 2 * dot * ux, d[1] - 2 * dot * uy];
}
const dirs = { 右: [1, 0], 左: [-1, 0], 上: [0, -1], 下: [0, 1] };
for (const key of ["/", "\\"]) {
  for (const [name, d] of Object.entries(dirs)) {
    const r = reflect(d, key).map(v => Math.round(v));
    console.log("鏡" + key + " 向き" + name + " → (" + r.join(", ") + ")");
  }
}
</script>

このコードをHTMLファイルとして保存してブラウザで開き、開発者ツールのコンソールを見ます。出てきた8行を、前の節の表と見比べてください。y は下向きが正なので、「上へ」は (0, -1) です。一致しない行があれば、符号の向きを見直す手がかりになります。

灯台から逆にたどる:光の道は逆向きでも同じ

反射の法則には、パズルを解くときに役立つ性質があります。光の道は、逆向きにたどっても同じ道になるという性質です。

表で確かめます。「右へ進む光が/で上へ」と曲がるなら、その逆は「下へ進む光が/で左へ」です。表の「下へ」「/」の欄は「左へ」で、逆向きの道と一致します。

この性質を使うと、次の解き方ができます。

  1. 光源から鏡をたどるのではなく、灯台に入る向きを決める。
  2. そこから光が来た向きを、逆向きに一つ前の鏡へたどる。
  3. 光源から延ばした道と、灯台から延ばした道が、どこでつながるかを見る。

「一歩だけのヒント」を使うときは、ヒントを見る前に、自分の表を使って「この鏡を切り替えれば道がつながる」と予想を立てます。その後でヒントを見て、予想と照らし合わせます。ヒントがどの範囲を示すかは、作品を開いて確かめてください。予想の的中は、反射の表が頭に入ったかどうかの目安になります。

最少回転の記録に挑むときも、同じ考え方が使えます。鏡の切り替え回数は、「どの鏡を触れば道が変わるか」を絞り込むほど減ります。戻す機能は、表との食い違いを確かめるために使えます。切り替えて、見て、戻す。この往復で、一つの鏡の効果を切り分けられます。

色ガラスは反射とは別の仕組み

このパズルには、鏡のほかに色ガラスがあります。灯台へ届けるのは「同じ色の光」なので、色の扱いも解く条件になります。

色ガラスは、反射ではなく吸収と透過で働くのが一般的です。たとえば赤いガラスは、白い光のうち赤の成分を主に通し、ほかの成分をおおむね吸収します。ですから、赤いガラスを通ると赤い光が残ります。その赤い光を緑のガラスに通すと、通れる成分が少なく、ほとんど暗くなります。ただし、作品の中で色が混ざるのか、通れない色は消えるのかは確認済みの範囲にありません。作品を開いて確かめる項目です。

ここでも観察設計が使えます。色ガラスの手前と奥で、光の色を紙に書きます。複数の色ガラスを通る経路があれば、順番を入れ替えると結果が変わるかを記録します。

  • 手前の色、ガラスの色、奥の色を1行にします。
  • 同じ組み合わせを、ガラスの順番を変えて比べます。
  • 反射の表とは別の表として管理し、鏡の判断と色の判断を混ぜません。

鏡は向きを決め、色ガラスは色を決めます。この二つを別々に考えると、光が届かないときの原因が絞れます。向きがずれているのか、色が合っていないのか、まず切り分けてください。

次の行動

「プリズムの道」を開き、序盤のステージの鏡を一つ選んで、「入る向き・鏡の種類・出る向き」を2行書いてみてください。表と一致したら、鏡を二つ、三つと増やし、灯台から逆にたどる解き方に進みます。数行のコードを自分のブラウザで動かして、予測表を確かめるのも一つの方法です。