C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++で点が円の内側にあるかどうかを判定する方法

円の中心座標と半径、そして1つの点が与えられたとき、その点が円の内側にあるかどうかを判定する問題です。この問題は、点から円の中心までの距離を計算すれば解決できます。その距離が半径以下であれば点は円の内側(または円周上)にあり、そうでなければ外側にあると判断できます。

判定の考え方

点 (x, y) と円の中心 (cx, cy) の間の距離 d は、次の式で求められます。

d = √((x − cx)² + (y − cy)²)

この距離 d が半径 r 以下であれば点は円の内側、r より大きければ外側です。実際のプログラムでは、平方根の計算を省いて「距離の2乗」と「半径の2乗」を直接比較すると、処理が高速になり、浮動小数点演算による誤差も防げるためおすすめです。

C++によるサンプルコード

#include <iostream>
#include <cmath>
using namespace std;

bool isInsideCircle(int cx, int cy, int r, int x, int y) {
    int dist = (x - cx) * (x - cx) + (y - cy) * (y - cy);
    if (dist <= r * r)
        return true;
    else
        return false;
}

int main() {
    int x = 4, y = 4, cx = 1, cy = 1, rad = 6;
    if (isInsideCircle(cx, cy, rad, x, y)) {
        cout << "Inside Circle";
    } else {
        cout << "Outside Circle";
    }
}

実行結果

Inside Circle

コードの解説

isInsideCircle関数では、点と中心のx座標の差およびy座標の差をそれぞれ2乗して足し合わせています。これは「点と中心の距離の2乗」に相当し、この値が r * r(半径の2乗)以下であれば true を返すことで、点が円の内側にあると判定されます。

main関数では、点 (4, 4)、円の中心 (1, 1)、半径 6 という条件で判定を行っています。点と中心の距離の2乗は (4−1)² + (4−1)² = 18 となり、半径の2乗である 36 以下のため、点は円の内側にあると判断され、「Inside Circle」が出力されます。

なお、このアルゴリズムの計算量は O(1) です。座標の値に関わらず常に一定の時間で判定できるため、大量の点をまとめて処理する場合にも非常に効率的です。

  1. C++で円と長方形の重なりを判定するアルゴリズム

    問題の概要円を (radius, xc, yc) という形式で表します。ここで (xc, yc) は円の中心座標です。同様に、軸に平行な長方形(軸平行境界ボックス)を (x1, y1, x2, y2) という形式で表し、(x1, y1) が左下隅の座標、(x2, y2) が右上隅の座標とします。このとき、円と長方形が互いに重なっているかどうかを判定する必要があります。たとえば、次のような入力が与えられた場合を考えてみましょう。この場合、出力は true(重なりあり)となります。解決のアプローチこの問題を解く鍵は、「長方形の中で円の中心に最も近い点」を見つけることです。その点と円の中心との距離が

  2. 3点から定義される円の内側・外側に点があるか判定するC++プログラム

    本記事では、平面上の3つの点 a、b、c によって定義される円に対して、ある点 d がその円の内側にあるのか、外側にあるのかを判定するC++プログラムを紹介します。判定には次の式を使用します。s = (x - xt)^2 + (y - yt)^2 − r * rここで、平面上の任意の点 t (xt, yt) の位置が、3点 (x1, y1)、(x2, y2)、(x3, y3) で定義される円とどのような関係にあるかは、s の値によって以下のように判別できます。s < 0 の場合:点 t は円の内側にあります。s > 0 の場合:点 t は円の外側にあります。s = 0 の場合:点