- ベストアンサー
鏡面反射像の計算式による導出
任意の形状(例えば線分AB)が平面鏡で反射した場合にどのような反射像になるか、アルゴリズムを式で導出したいのですが、光学の教科書等をめくってみても平面鏡での反射像の作図などしか載ってないので、どなたかそのようなことが書いてある参考書等がおわかりでしたらお教えください。 ちなみに光学は初心者です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
繰り返しになります。物体f(x,y,z)の像g(x,y,z)は以下のように計算されます。 平面鏡が(X,Y,Z)空間でX=0の平面に来るように座標系(x,y,z)と(X,Y,Z)との一次変換 x = R X + p y Y + q z Z + r という変換をする。ここでRは回転を表す行列で、Rの転置行列がRの逆行列になっているような3×3行列です。 そして、 f(x,y,z)を(X,Y,Z)座標に移したものをF(X,Y,Z)とするとき、像はG(-X,Y,Z)となる。これを再び(x,y,z)座標に移したのが像g(x,y,z)ですね。 実際の計算では、同じ事を、式をもう少し整理して行っていますが、原理は同じです。 lay tracing の場合も同じ事で、ただ時間の順序を逆にして、「目(点と考えます)から光線が飛び出したとして、それが何処に当たるか」を計算すると効率が良い、というものです。光線が鏡面にぶつかると、そのぶつかった局所では「平面鏡」と同じとして扱います。この場合、目の像が何処に出来るかを計算し、「鏡面に光がぶつかった位置」と「目の像」とを結ぶ直線上に何か物体があれば、その物体の色を拾ってきて、「目から飛び出した光線で捉えた色」として記録する訳です。しかしその物体がまた鏡面だったりすると、さらに光は反射し…という計算を繰り返さねばなりません。大抵のソフトでは何回か以上の反射は無視して計算しています。
その他の回答 (1)
- stomachman
- ベストアンサー率57% (1014/1775)
こいつは幾何学の問題でしょう。 平面鏡ですよね。平面鏡が置いてある平面を3次元空間のx=0の平面であるとしましょう。(そうなっていなかったら、座標系を回転・平行移動して、x=0の平面に鏡が来るようにしてやります。)すると、物体の各点の座標を(x,y,z) (x>0)とするとき、その点の像は(-x,y,z)に出来ます。 鏡の大きさが十分大きければ、これでおしまい。 でももし鏡が小さいのなら、観測者の位置(xo,yo,zo)から像(-x,y,z)が見えないかもしれない。鏡からはみ出してしまっているわけです。これは、鏡の領域を「穴」だと思えばよい。(xo,yo,zo)と(-x,y,z)を結ぶ直線がこの穴を通るなら、見えるし、通らないなら見えない。 CGをやっていらっしゃるなら、こういう言い換えの方が分かり易いかな?:鏡の形の領域(x=0の平面上にあります)を底面とし(xo,yo,zo)を頂点とする錐(たとえば鏡が四角形なら四角錐)を考えて、この錐をx<0の方に延長した空間領域を考えます。この空間領域で像をclippingしてやれば、鏡の中に写る像だけがレンダリングできる。
補足
早速の丁寧なご回答、ありがとうございます。 更なる理解を深めたいため、少し補足をさせていただきます。 stomachman さんのおっしゃることは、参考書等でなんとなくわかって いたのですが、よりわかりやすい説明でイメージをはっきりさせることが できました。ありがとうございます。 私がここ1ヶ月程ずっとわからないのは、物体f(x)が平面鏡で反射すると 像g(x)はどのようになるか、ということです。光線追跡ソフトなどで どのような式変換が行われて、f(x)→g(x)になるかを知りたいのです。 stomachmanさんを含めどなたか、もしよろしければ再度ご回答をいただけると幸いです。P.S.CGには手をつけておりません。
お礼
今回もわかりやすく回答していただきありがとうございました。 f(x,y,z)→F(X,Y,Z)→G(-X,Y,Z)→g(x,y,z) という流れというわけですね。 今回初めて教えて!gooを使いましたが、私もstomachmanさんのように 自分がわかる質問には積極的に答えていきたいと思います。