世界の隅の開発室

 

◎  スポンサーサイト 

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

◎  【数学】ブロック崩し制作の為に ベクトル反射 

前回cocos2d-xというフレームワークを紹介しました。

早速、これを使ってブロック崩しでも作りたいと思いますので

ブロック崩しに必要な知識、「ベクトル反射」について学びましょう。


※もちろん、今回扱うベクトルはデカルト座標系を使います。
デカルト座標系ベクトルとは、vector = [ai,bj....]で表される多次元ベクトルで
i,j....を座標軸方向の単位ベクトルと定義したものです。




まず真っ先に反射の鉄則、入射角と反射角は等しいということを先に言っておきます。(空気抵抗、摩擦などは考えず、衝突する物体は静止剛体とする)



すると、反射後ベクトルは、反射前ベクトルと衝突剛体の法線ベクトルの投影ベクトルと、反射前ベクトルの衝突剛体の接線方向成分の和で表すことが出来ます。

まあ、分からないと思うので図で説明します。
簡略化の為に二次元で説明しますが、三次元への応用は簡単です。

vector01


図適当ですみません。




衝突剛体の法線ベクトルをNとすると、反射前ベクトルvとの為す角、反射後ベクトルv'の為す角は等しい。

よってまず、Nを求める。

Nの計算は楽で、剛体の接線ベクトルのx成分の符号を反転させ、そしてx、y成分を入れ替えるだけです。
これは垂直なベクトル二本の内積が0の時垂直である、という定義より明らかです。

そして、このベクトルを計算に使い易くするために、正規化します。
ベクトルの正規化とは、大きさを1にすることで、各成分に対し自身のベクトルの大きさを割ることで計算できます。

この正規化されたベクトルをN'とします。


次に、N方向かつN方向成分の大きさがv,v'と等しい、即ち「投影ベクトル」を求めます。
投影ベクトルの大きさは投影したいベクトルと、投影先の正規化されたベクトルの内積で求めることが出来るので、

vの符号を反転させて(向きが逆な為)、N'との内積 O = -v・N'
ベクトルの内積Oはスカラー、即ち大きさでしかないので、先ほど求めた正規化ベクトルN'にかけることで、N'方向かつ大きさOのベクトルPが求まります。
P = O * N' = (-v・N') * N'


次に、vの、剛体の接線方向成分Vを求めます。
これは簡単で
V = v+P で求められます。

よって、VとPの和が求める反射後ベクトル、即ち

v' = P + V = P + (v + P) = v + 2P = v + 2{(-v・N') * N'}

であると証明出来ます。


次回はこれをプログラム化して、実際に組んでみましょ。

では。
スポンサーサイト

◎  【幾何学】斜面にオブジェクトを配置する 

3Dマッピングなどに必要な、斜面に水平にオブジェクトを置く為の幾何学演算のお話をします。

斜面にオブジェクトを配置した時、当然オブジェクトも斜面に合わせて傾かなければなりません。
そうでなければ床にめり込みますからね。


では、どうすればいいのか?
今回はオブジェクトが剛体であることを前提としてお話します。

まず、1つ目が、当たり判定と重力演算を使って物理的に配置する方法ですね。
斜面に配置した時、床が剛体に対して重心を捉えた、もしくは3点の支点を持った時に重力演算を終えればきちんと斜面に配置されるはずです。

しかし、そもそも静的なオブジェクトに対し物理演算を行うのは非常に非効率です。

ここで、2つ目の方法として、剛体が配置された平面の法線ベクトルを求める方法があります。

剛体が配置される平面上の任意の点3点を(剛体を支える3点が望ましい)
p1(x1,y1,z1),p2(x2,y2,z2),p3(x3,y3,z3)
とした時(以降ベクトルは斜体で表す)
p1p2p1p3の外積nが法線ベクトルとなるので

p1p2 = [x2-x1 y2-y1 z2-z1]
p1p3 = [x3-x1 y3-y1 z3-z1]


p1p2 × p1p3 = n

= [ (y2-y1)(z3-z1)-(z3-z1)(y3-y1) , (z2-z1)(x3-x1)-(x2 -x1)(z3-z1) , (x2-x1)(y3-y1)-(y2-y1)(x3-x1) ]


このベクトルnと、オブジェクトの中心軸が平行となることで、斜面に対して水平にオブジェクトを配置することが出来ます。

もし接地面が曲面の場合は....微小領域を考えてそこから接する平面を考えればいいのだろうか。
それともやはり普通に支点3点から同様に計算するのか?



今回はこの辺で。


back to TOP

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。