dポイントプレゼントキャンペーン実施中!

VC++6.0+DirectX8.0SDKで2Dのゲームを作っています。

壁にあたったら反射するという事をしたいのですが、
角度αの面に対してベクトルAがぶつかったとして
反射後のベクトルA'を計算するにはどうすればいいでしょうか?
(x成分y成分の具体的な計算方法を知りたいです)

数学的に高校レベルかと思うのですが・・・
恥ずかしながらご教授ください。

A 回答 (5件)

教科書などを見れば分かると思うんだけど・・・


検索エンジンで検索すれば出てくると思うし。

角度αで当たったら、角度αで反対に反射します。
図示できないのでうまく説明できないけど。
例えばX-YグラフY=0に壁があるとして、
(2,1)から原点方向に球を投げると(-2、1)の方向に球は向かいます。
ようするにX=0に関して線対称の位置に行くってことです。

この回答への補足

とりあえず、私なりに考えたのは
最初のベクトルAから余弦定理から
arccosでなす角βを求めて
反射後のベクトルは
x'=|A|cos(α+β)
y'=|A|sin(α+β)
といった感じになるのでしょうか。

補足日時:2002/11/11 10:30
    • good
    • 0
この回答へのお礼

ありがとうございます。
入射角と反射角が等しいのはわかるのですが具体的に
30度の面に対してベクトル(2,-1)がぶつかったときの
反射後のベクトルを求める式を知りたいのです。

図に書いて考えると
答えとしてはベクトル(0,√3)になるのだと思うのですが(自信無し)
これを一般的な式で変換したいわけです。

もちろんwebでは調べましたが、
なかなか自分に理解できるページが無かったので・・・。
どこか参考になるページがあれば宜しくお願いします。
(ちなみに教科書はありません・・・)

お礼日時:2002/11/11 07:21

失礼しました。

文字が化けていますね。

>面上の点(どれでも任意)をP
面上の点(どれでも任意)をPs

>入射方向ベクトルaの出発点が必要でこれをPasdjr>
入射方向ベクトルaの出発点が必要でこれをPaとすると、

です。
    • good
    • 0
この回答へのお礼

詳しく分かり易い説明とても参考になります。ありがとうございました。

お礼日時:2002/11/12 06:58

ぶつかる面の法線ベクトルを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にするだけです。

では。
    • good
    • 0

以前レスをつけたものです。


この前はもっと基本的なことだと思っていたから。

球を投げる地点Aの位置ベクトルをA→、
球が当たる地点Bの位置ベクトルをB→とします。

面の法線に対してAから垂線を引きます。
それの交点をCとします。

C→からA→をひいて、それをさらにC→に足すと、Aが反射後に向かう(通る)位置のAを原点とした位置ベクトルが分かります。
それをD→とすると、
D→からBA→をひくとベクトルが求まります。

余弦定理とか難しいことは必要ないです。

考え方は他にもいろいろあるので、計算方法も一つではありません。
    • good
    • 0
この回答へのお礼

再度ご回答頂きありがとうございます。大変勉強になりました。

お礼日時:2002/11/12 06:57

http://www.geocities.co.jp/SiliconValley/2530/
↑ここのブロック崩しのソースと、

http://pc.2ch.net/tech/kako/1004/10048/100485551 …
↑ここのスレ辺りが参考になるかと思います。

参考URL:http://www.geocities.co.jp/SiliconValley/2530/
    • good
    • 0
この回答へのお礼

参考にさせて頂きます。ご回答ありがとうございました。

お礼日時:2002/11/12 06:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!