二次元における話を三次元に拡張し,sympy で解いてみた。
x-y-z の三次元空間で,x-y 平面(床面としよう)が鏡になっている。z 軸が正の方向(x-y 平面の上方向)からこの鏡にレーザー光を当てると反射する。
点 (a, b, c) = (5, 2, 3) からレーザー光を発射し,反射したレーザー光が点(d, e, f) = (-1, 5, 8) を通るようにするには,x-y 平面のどこを狙えばよいか((a, b, c) などは,x, y, z の順の座標値)。
from sympy import *
var('a, b, c, d, e, f, x, y, z')
eq1 = Eq((x - a) / (d - a), (z - c) / (f - c))
eq2 = Eq((y - b) / (e - b), (z - c) / (f - c))
eq1 = eq1.subs([(a, 5), (c, -3), (d, -1), (f, 8), (z, 0)])
eq2 = eq2.subs([(b, 2), (c, -3), (e, 5), (f, 8), (z, 0)])
solve([eq1, eq2], [x, y])
var('a, b, c, d, e, f, x, y, z')
eq1 = Eq((x - a) / (d - a), (z - c) / (f - c))
eq2 = Eq((y - b) / (e - b), (z - c) / (f - c))
eq1 = eq1.subs([(a, 5), (c, -3), (d, -1), (f, 8), (z, 0)])
eq2 = eq2.subs([(b, 2), (c, -3), (e, 5), (f, 8), (z, 0)])
solve([eq1, eq2], [x, y])