円と長方形の当たり判定

みんなが作った便利な関数やサンプルを共有するコミュニティです。
[url]http://www.activebasic.com/forum/viewforum.php?f=2]ActiveBasicの「実践コードモジュール」[/url]的な感じでやりましょう。
フォーラム(掲示板)ルール
・投稿するコードはできるだけ一つ、もしくは一つの関数を補助する複数の関数の形式にするか、
それだけをコンパイルして動くソースコード一式の形にしてください。
記事には説明だけを書き、コードは添付ファイルにしてもかまいません。
・使い方などの説明も書いてください。
環境に依存するコードの場合は、対象の環境も書いてください。
・使用条件(ライセンスなど)も書いていただけるとありがたいです。
・C言語、もしくはC++推奨ですが、他の言語でもかまいません。
・コードは正しくcodeタグで囲みましょう。
・一つのスレッドで一つのサンプルが基本です。
関連するサンプルの場合はまとめてもかまいません。
・投稿したサンプルを修正する場合には、スレッドの返信の形で投稿してください。
(新しいスレッドにしないでください。記事の編集でもかまいません)
返信
アバター
usao
記事: 1887
登録日時: 11年前

円と長方形の当たり判定

#1

投稿記事 by usao » 9年前

日記に書いてたやつですが,
せっかくなので,ここに置いておきますね.

長方形と円の当たり判定

コード:

//(cx,cy)は,長方形の中心を原点とした 円の中心座標
//円の半径をr
//長方形の縦横のサイズを hW*2,hH*2 とする
//((hW,hH,rは全て正の値であること)
bool Rect_vs_Circle_CollisionCheck( double hW, double hH, double cx, double cy, double r )
{
  cx = fabs( cx );
  cy = fabs( cy );
  if( cx <= hW ){  return ( cy<=hH+r );  }
  if( cy <= hH ){  return ( cx<=hW+r );  }
 
  //角との判定
  double dx = cx - hW;
  double dy = cy - hH;
  return ( dx*dx + dy*dy <= r*r );
}
※円の中心座標(cx,cy)は,
【長方形の中心を原点とし,長方形の 長辺に平行な方向 と 短辺に平行な方向 とを座標軸の方向とした直交座標系】での座標です.
(平たく言えば,「長方形が斜めに回転してるような場合は,回転後の世界での座標を求めて与えてね」みたいな.)

返信

“サンプルを共有するコミュニティ” へ戻る