- ベストアンサー
入射角反射角
VC++6.0+DirectX8.0SDKで2Dのゲームを作っています。 壁にあたったら反射するという事をしたいのですが、 角度αの面に対してベクトルAがぶつかったとして 反射後のベクトルA'を計算するにはどうすればいいでしょうか? (x成分y成分の具体的な計算方法を知りたいです) 数学的に高校レベルかと思うのですが・・・ 恥ずかしながらご教授ください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
教科書などを見れば分かると思うんだけど・・・ 検索エンジンで検索すれば出てくると思うし。 角度αで当たったら、角度αで反対に反射します。 図示できないのでうまく説明できないけど。 例えばX-YグラフY=0に壁があるとして、 (2,1)から原点方向に球を投げると(-2、1)の方向に球は向かいます。 ようするにX=0に関して線対称の位置に行くってことです。
その他の回答 (4)
失礼しました。文字が化けていますね。 >面上の点(どれでも任意)をP 面上の点(どれでも任意)をPs >入射方向ベクトルaの出発点が必要でこれをPasdjr> 入射方向ベクトルaの出発点が必要でこれをPaとすると、 です。
お礼
詳しく分かり易い説明とても参考になります。ありがとうございました。
ぶつかる面の法線ベクトルをn、面上の点(どれでも任意)をP、入射方向ベクトルをa、出射方向ベクトルをbとします。 まず、方向ベクトルは、 b=a-2(a・n)n ('・'は内積を表します。 ax * nx + ay * ny + az * nz ですね) で求まります。(全て単位ベクトル=大きさ1のベクトルで計算しています) 具体的に平面状でぶつかった点Pcを求めるには、入射方向ベクトルaの出発点が必要でこれをPasdjr> Pc = Pa + {n・(Ps-Pa)/(n・a)}a となります。 上記は三次元空間で考えましたが、二次元であればz成分を0にするだけです。 では。
- aodesu
- ベストアンサー率14% (6/42)
以前レスをつけたものです。 この前はもっと基本的なことだと思っていたから。 球を投げる地点Aの位置ベクトルをA→、 球が当たる地点Bの位置ベクトルをB→とします。 面の法線に対してAから垂線を引きます。 それの交点をCとします。 C→からA→をひいて、それをさらにC→に足すと、Aが反射後に向かう(通る)位置のAを原点とした位置ベクトルが分かります。 それをD→とすると、 D→からBA→をひくとベクトルが求まります。 余弦定理とか難しいことは必要ないです。 考え方は他にもいろいろあるので、計算方法も一つではありません。
お礼
再度ご回答頂きありがとうございます。大変勉強になりました。
- HogePiyo
- ベストアンサー率57% (24/42)
http://www.geocities.co.jp/SiliconValley/2530/ ↑ここのブロック崩しのソースと、 http://pc.2ch.net/tech/kako/1004/10048/1004855513.html ↑ここのスレ辺りが参考になるかと思います。
お礼
参考にさせて頂きます。ご回答ありがとうございました。
お礼
ありがとうございます。 入射角と反射角が等しいのはわかるのですが具体的に 30度の面に対してベクトル(2,-1)がぶつかったときの 反射後のベクトルを求める式を知りたいのです。 図に書いて考えると 答えとしてはベクトル(0,√3)になるのだと思うのですが(自信無し) これを一般的な式で変換したいわけです。 もちろんwebでは調べましたが、 なかなか自分に理解できるページが無かったので・・・。 どこか参考になるページがあれば宜しくお願いします。 (ちなみに教科書はありません・・・)
補足
とりあえず、私なりに考えたのは 最初のベクトルAから余弦定理から arccosでなす角βを求めて 反射後のベクトルは x'=|A|cos(α+β) y'=|A|sin(α+β) といった感じになるのでしょうか。