当たり判定の基本

ゲームプログラミングの衝突検出 (Collision Detection)、いわゆる「当たり判定」において最も基本的な、二つの長方形 (矩形 (くけい) ともいう) が重なる条件と、二つの円が重なる条件について。

以下、平面座標において、左上を原点とし、右方向に x 軸、下方向に y 軸をとるものとする。

二つの長方形が重なる条件 (1)

各辺が x 軸または y 軸に平行な二つの長方形 A、B が与えられていて、

  • A の左上頂点の座標を (x, y)、横幅を w、縦の長さを h
  • B の左上頂点の座標を (X, Y)、横幅を W、縦の長さを H

とする。このとき、二つの長方形が重なるための (必要十分) 条件は、

(x < X+W and X < x+w) and (y < Y+H and Y < y+h)

である。前半の「x < X+W and X < x+w」が x 座標において重なる条件であり、後半の「y < Y+H and Y < y+h」が y 座標において重なる条件である。

特に、W=H=0 のとき、長方形Aが点Bを内部に含む条件になる:

(x < X and X < x+w) and (y < Y and Y < y+h)

二つの長方形が重なる条件 (2)

各辺が x 軸または y 軸に平行な二つの長方形 A、B が与えられていて、

  • A の中心の座標を (x, y)、横幅を w、縦の長さを h とし、
  • B の中心の座標を (X, Y)、横幅を W、縦の長さを H とする。

このとき、二つの長方形が重なるための (必要十分) 条件は、

|X-x| < (W+w)/2 and |Y-y| < (H+h)/2

である。前半の「|X-x| < (W+w)/2」が x 座標において重なる条件であり、後半の「|Y-y| < (H+h)/2」が y 座標において重なる条件である。

特に、W=H=0 のとき、長方形Aが点Bを内部に含む条件になる:

|X-x| < w/2 and |Y-y| < h/2

二つの円が重なる条件

二つの円 A、B が与えられていて、

  • A の中心の座標を (x, y)、半径を r
  • B の中心の座標を (X, Y)、半径を R

とする。このとき、二つの円が重なるための (必要十分) 条件は、

(X-x)^2 + (Y-y)^2 < (R+r)^2  

である。この条件は、二つの円の中心の距離が、二つの円の半径の和より小さいことを意味する。

特に、R=0 のとき、円 A が点 B を内部に含む条件になる:

(X-x)^2 + (Y-y)^2 < r^2 

3次元の場合にも、直方体や球に対して同様のことがいえます。

【theme : プログラミング
【genre : コンピュータ

プロフィール

よしいず

Author:よしいず
MATHEMATICS.PDFというウェブサイトを運営しています。

管理の都合上、トラックバックとコメントはオフにしてあります。ブログ経験者なら分かっていただけると思いますが、スパム(アダルトやその他の宣伝)ばかりなのが現実です。

リンクは自由です。当サイトの記事に対する間違いの指摘・意見・感想などを述べた記事からのリンクは歓迎です。ただし、ブログ記事アップ直後はミスが多く、頻繁に修正します。場合によっては削除する可能性もあります。その際、何も断りもなく修正・削除しますがご了承ください。内容を参考にする場合には投稿後一週間ほど様子を見てからにしてください(笑)。

記事の間違いを指摘するときは、その具体的箇所、理由(仕様に反するなど)・根拠(参考にした文献など)、代替案(同じ結果を得るための正しいやり方)も教えてください。そうしないと、(指摘される側および第三者はその時点では無知の状態なので、)どこが間違いなのか分かりませんし、本当に間違っているのかどうかが判断・検証できません。実際、間違いだと指摘されたことが結局は正しかったというケースもありますので。

このブログのタイトル一覧

リンク
月別アーカイブ
カテゴリ
最新記事
検索フォーム
RSSリンクの表示