スポンサーサイト

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

当たり判定2(点と四角形の当たり判定)

一日に複数の記事を書くのははじめてだと思いますが、忘れないうちに一気に書いておきたいと思います。
今回は当たり判定第二回目

当たり判定2(点と四角形の当たり判定)

四角形の領域を表現するベクトルvect{p}を次のように表現する。
vect{p} = vect{c} + k*vect{a} + l*vect{b} k,lは[0,1]の区間とする。
ここで、vect{a}は四角形のひとつの頂点(点O)のベクトルであり、vect{a}、vect{b}
は点Oを始点として四角形の一辺を表現するベクトルとする。

点を表すベクトルをvect{q}と表現する。
vect{q} = vect{c} + m*vect{a} + n*vect{b} m,nは任意の実数とする。
vect{q}がvect{p}の領域にある場合は四角形と点があったっている状態であると考えてよいので


任意の実数m,mの区間がともに[0,1]である場合は点と四角形があったっている状態であると考え

てよい。




スポンサーサイト

当たり判定1(2円の当たり判定)

導入
いきなり当たり判定なんて何かと思うかもしれませんが、
ゲームプログラミングの分野では当たり判定はかなり重要です。
特にシューティングゲームなど大量の図形同士の当たり判定はそれぞれの図形同士の判定を
素早くすることがゲームの安定な動作に重要になります。

ここでは最終的には四角形と円との当たり判定を考えますが、その導入部分として
2円の当たり判定を考えて生きます。

本文


ベクトルを用いた2円の当たり判定の仕方を説明する。

判定したい円O_1とO_2を以下のように定義する。
O_1: |vect{p}_1 - vect{q}_1| = r_1
O_2: |vect{p}_2 - vect{q}_2| = r_2

2円の中心間の距離とが半径の和より大きければ2円の一部は重なる。

よって
|vect{q}_1 -vect{q}_2| <= r_1 + r_2
になるとき2円の一部は重なる

[C/C++]変態的なソースコード

//////////////////////main.cpp
#include

#define MAX 9

#define COUNT MAX

#define SSS(COUNT) int i##COUNT,

int fff(
#include "define.hpp"
#undef SSS
int last
)
{


#define SSS(COUNT) \
std::cout << i##COUNT << std::endl;

#undef COUNT
#define COUNT MAX
#include "define.hpp"
#undef SSS
return 0;
}

int main()
{
#undef COUNT
#define COUNT MAX
#define SSS(COUNT) COUNT,
fff(
#include "define.hpp"
0
);

return 0;
}
////////////////////////define.hpp

#ifdef COUNT

#if COUNT <= 0

#else


#include "count.hpp"
#include "define.hpp"

#endif


#else

#error Don't define Count

#endif
///////////////////////count.hpp

#if COUNT == 10
SSS(10)
#elif COUNT == 9
SSS(9)
#undef COUNT
#define COUNT 8
#elif COUNT == 8
SSS(8)
#undef COUNT
#define COUNT 7
#elif COUNT == 7
SSS(7)
#undef COUNT
#define COUNT 6
#elif COUNT == 6
SSS(6)
#undef COUNT
#define COUNT 5
#elif COUNT == 5
SSS(5)
#undef COUNT
#define COUNT 4
#elif COUNT == 4
SSS(4)
#undef COUNT
#define COUNT 3
#elif COUNT == 3
SSS(3)
#undef COUNT
#define COUNT 2
#elif COUNT == 2
SSS(2)
#undef COUNT
#define COUNT 1
#elif COUNT == 1
SSS(1)
#undef COUNT
#define COUNT 0
#else

#error COUNT over 10
#endif

////////////////////ここまで

テーマ : プログラミング
ジャンル : コンピュータ

プロフィール

かみさまみならい

Author:かみさまみならい
FC2ブログへようこそ!

最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
ブロとも申請フォーム

この人とブロともになる

ブログ内検索
RSSフィード
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。