ページ 11

円と長方形の当たり判定

Posted: 2015年3月11日(水) 10:00
by usao
日記に書いてたやつですが,
せっかくなので,ここに置いておきますね.

長方形と円の当たり判定

コード:

//(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)は,
【長方形の中心を原点とし,長方形の 長辺に平行な方向 と 短辺に平行な方向 とを座標軸の方向とした直交座標系】での座標です.
(平たく言えば,「長方形が斜めに回転してるような場合は,回転後の世界での座標を求めて与えてね」みたいな.)