C++で特定の円が2つの同心円が作るリングの内側に完全に含まれるかどうかを判定する方法
原点を中心とする2つの同心円があるとします。内側の円の半径を r、外側の円の半径を R(R > r)とすると、この2つの円の間にはリング状の領域が生まれます。ここにもう1つ別の円があり、その半径 r1 と中心座標 (x, y) が与えられたとき、この円がリングの内側に完全に収まっているかどうかを判定するのが本記事のテーマです。
解き方の考え方
この問題は、三平方の定理(ピタゴラスの定理)を使うことで簡単に解けます。まず、対象の円の中心から原点までの距離 dis を次の式で計算します。
dis = √(x² + y²)
続いて、次の2つの条件を確認します。
- 内側の条件: 円のうち原点に最も近い点(dis − r1)が、内側の円の半径 r 以上であること
- 外側の条件: 円のうち原点から最も遠い点(dis + r1)が、外側の円の半径 R 以下であること
この2つの条件がどちらも成り立てば、その円はリングの内側に完全に含まれていると判断できます。
C++での実装例
#include <iostream>
#include <cmath>
using namespace std;
bool isInside(int r, int R, int r1, int x, int y) {
double dis = sqrt(x*x + y*y);
return (dis - r1 >= r && dis + r1 <= R);
}
int main() {
int r = 4, R = 8, r1 = 2, x = 6, y = 0;
if (isInside(r, R, r1, x, y))
cout << "Circle is inside the ring." << endl;
else
cout << "Circle is not inside the ring." << endl;
}
実行結果
Circle is inside the ring.
コードの解説
この例では、内側の円の半径 r = 4、外側の円の半径 R = 8、対象の円の半径 r1 = 2、中心座標 (6, 0) を設定しています。
まず、中心から原点までの距離は dis = √(6² + 0²) = 6 となります。そこで各条件を評価すると、
- dis − r1 = 6 − 2 = 4 ≥ r(4) → 条件を満たす
- dis + r1 = 6 + 2 = 8 ≤ R(8) → 条件を満たす
両方の条件が成立しているため、「Circle is inside the ring.(円はリングの内側にあります)」という結果が出力されます。
なお、距離の計算では小数への丸め誤差を避けるため、sqrt の戻り値を受け取る変数は double 型にしています。また、円がリングの境界線にぴったり接する場合も「内側」とみなしたい場合は、比較演算子に以上・以下(>=、<=)を使用するのがポイントです。
-
C++で2つの同心円の間の面積を計算する方法を解説
同心円とは?同心円とは、2つの円が共通の中心を共有しながら、半径の長さが異なる(r1 と r2、ただし r2 > r1)形状のことです。円の中に別の円が含まれているイメージで、2つの同心円の間の領域は「環(アニュラス)」と呼ばれます。以下は同心円の図です。問題半径の長さが異なる2つの同心円(r1 と r2、ただし r2 > r1)が与えられたとします。課題は、青色で強調表示された2つの円の間の面積を求めることです。2つの円の間の面積を計算するには、大きい円の面積から小さい円の面積を差し引きます。大きい円の半径を r2、小さい円の半径を r1 とすると、求める面積は次のようになります。入出力例入
-
Pythonで、ある円が2つの同心円の境界内に収まっているかどうかを判定する方法
半径 r1 と r2 を持つ2つの同心円があるとします。そこに、中心座標 coord と半径 r を持つもう1つの円を加えます。今回の課題は、この新しい円が、与えられた2つの同心円の間の境界領域内に完全に収まっているかどうかを判定することです。 たとえば、入力が r1 = 4、r2 = 2、coord = (3, 0)、r = 1 の場合、出力は True になります。 解法のアプローチ この問題は、点から原点までの距離を求める幾何学的な計算を使えば、シンプルに解決できます。手順は以下のとおりです。 まず、円の中心 (x, y) から原点までの距離 val を計算します。つまり、val =