![見出し画像](https://assets.st-note.com/production/uploads/images/97698206/rectangle_large_type_2_714df48336cd6d12c06a05bd980375d2.png?width=1200)
円と円の当たり判定
まずは、円同士の当たり判定について書いていきます。
判定の取り方
2つの円の「中心点の距離」と「半径の和」を比べて、半径の和のほうが大きければ当たっているといえます。
例えば、このように円があった場合
![](https://assets.st-note.com/img/1676009254468-NgfjA2TehB.png?width=1200)
中心点の距離は、円1と円2の中心点をまっすぐつないだ線の長さ、
![](https://assets.st-note.com/img/1676009264098-nz8taYd8GI.png?width=1200)
半径の和は、円1と円2の半径を足した線の長さとなります。
![](https://assets.st-note.com/img/1676009272856-5SYPpmdQ3D.png?width=1200)
そして、二つの線の長さを比べて、
中心点の距離が半径の和より大きければ、二つの円は当たっていない、
![](https://assets.st-note.com/img/1676009280336-YLPv6hEoPB.png?width=1200)
中心点の距離より半径の和のほうが大きければ、二つの円は当たっているということになります。
![](https://assets.st-note.com/img/1676009403807-P88EBDSpVW.png?width=1200)
計算方法
中心点の距離を求めるには、中学校で習った三平方の定理というものを使います。
直角三角形の斜辺の部分が、今回求めたい「中心点の距離」です。
![](https://assets.st-note.com/img/1676020007727-f8ABs3JyQE.png?width=1200)
まずは、二つの円のx同士とy同士の引き算をしていきます。
今欲しい情報はaとbの長さなので、1と2の順番を変えても結果は変わりません。
![](https://assets.st-note.com/img/1676019999866-1ZTTyOCIpX.png?width=1200)
aとbの長さがわかったらcの長さを求めます。
![](https://assets.st-note.com/img/1676020245840-eDyhXmMfnJ.png?width=1200)
半径の和は、二つの円の半径を足し合わせるだけでいいので簡単ですね。
あとは、中心点の距離と半径の和の大きさを比べて、中心点の距離のほうが小さければ当たっている。そうでなければ当たっていないと判定できます。
サンプル
c++でのサンプルコードです。
#include <math.h>
/*計算に必要な情報*/
//円1の中心座標
float circle1X;
float circle1Y;
//円1の半径
float circle1R;
//円2の中心座標
float circle2X;
float circle2Y;
//円2の半径
float circle2R;
/*当たり判定の計算*/
//中心点の距離
float lengthX = circle1X - circle2X;
float lengthY = circle1Y - circle2Y;
float centerDistance = sqrtf(lengthX * lengthX + lengthY * lengthY);
//半径の和
float radiusSum = circle1R + circle2R;
//中心点の距離より半径の和のほうが大きい
if (centerDistance <= sumRadius)
{
//二つの円が当たっている
return true;
}
//二つの円が当たっていない
return false;
この記事が気に入ったらサポートをしてみませんか?