BounceBall#05 ボールを反射させる
ボールが四角に衝突したときの反射について考えます。
上の図のよう各々のベクトルが決められたとき、ボールの進行ベクトルと反射ベクトル、平行ベクトルでなされる大きな三角に着目すると求めたいは下記の通りです。
ここでは既知ですので、を求めればよいです。
と、法線ベクトルの定数倍であるでなされる小さな三角に着目すれば、
となるので、式\eqref{1}に代入して、
が得られます。既知である反射面のベクトルからその法線ベクトルを求められるので、定数aがわかれば反射ベクトルを求めることができます。
定数aを求めるために、再びと、でなされる小さな三角に着目します。この三角形の内積と三角関数の公式を用いれば、下記の2式が成立します。
この2式から定数aが
と求まるので、定数aを式\eqref{3}に代入して、反射ベクトルを導くことができました。
BounceBallではこの式を実装してボールの反射を制御しています。
ベクトル計算をしたのは高校以来で、懐かしい気持ちになりました。大分前ですが、案外覚えているものだと感心?しています。
あと、本筋とは違いますが、前回からの数式はTexコマンドで数式を書いています。大学の時にレボート、論文で使っていたので苦労せず記述できました。(はてなブログへのTexコマンド導入方法でかなり手こずりましたが...)当時は今時Texとかwordでいいじゃん、等々言われましたが、どこかで役に立つものですね。