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

C++で三角形の外心を求めるプログラム

このチュートリアルでは、三角形の外心(がいしん)を求めるC++プログラムについて解説します。

ここでは、同一直線上にない3つの点(非共線点)が与えられます。私たちのタスクは、それらの点によって形成される三角形の外心を正確に計算することです。

外心とは?

外心とは、三角形の各辺の垂直二等分線が1点で交わる点のことです。外心は三角形の3つの頂点すべてから等しい距離にあり、この距離がそのまま外接円の半径になります。

アルゴリズムの流れ

  1. 2点PとQを通る直線の方程式「ax + by = c」を求めます。
  2. その直線に対する垂直二等分線の方程式を導きます。
  3. 同様に、QとRを通る直線の垂直二等分線も求めます。
  4. 2つの垂直二等分線の交点を計算します。この交点が外心です。
  5. 2直線が平行(行列式が0)の場合、与えられた3点は同一直線上にあり、三角形を形成しないものとして処理します。

C++による実装例

#include <iostream>
#include <cfloat>
using namespace std;
// X座標とY座標を格納
#define pdd pair<double, double>

void lineFromPoints(pdd P, pdd Q, double &a, double &b, double &c){
    a = Q.second - P.second;
    b = P.first - Q.first;
    c = a*(P.first)+ b*(P.second);
}
void perpendicularBisectorFromLine(pdd P, pdd Q, double &a, double &b, double &c){
    pdd mid_point = make_pair((P.first + Q.first)/2, (P.second + Q.second)/2);
    c = -b*(mid_point.first) + a*(mid_point.second);
    double temp = a;
    a = -b;
    b = temp;
}
pdd lineLineIntersection(double a1, double b1, double c1, double a2, double b2, double c2){
    double determinant = a1*b2 - a2*b1;
    if (determinant == 0){
        return make_pair(FLT_MAX, FLT_MAX);
    } else {
        double x = (b2*c1 - b1*c2)/determinant;
        double y = (a1*c2 - a2*c1)/determinant;
        return make_pair(x, y);
    }
}
void findCircumCenter(pdd P, pdd Q, pdd R){
    double a, b, c;
    lineFromPoints(P, Q, a, b, c);
    double e, f, g;
    lineFromPoints(Q, R, e, f, g);
    perpendicularBisectorFromLine(P, Q, a, b, c);
    perpendicularBisectorFromLine(Q, R, e, f, g);
    pdd circumcenter = lineLineIntersection(a, b, c, e, f, g);
    if (circumcenter.first == FLT_MAX && circumcenter.second == FLT_MAX){
        cout << "The two perpendicular bisectors "
            "found come parallel" << endl;
        cout << "Thus, the given points do not form "
            "a triangle and are collinear" << endl;
    } else {
        cout << "The circumcenter of the triangle PQR is: ";
        cout << "(" << circumcenter.first << ", "
            << circumcenter.second << ")" << endl;
    }
}
int main(){
    pdd P = make_pair(6, 0);
    pdd Q = make_pair(0, 0);
    pdd R = make_pair(0, 8);
    findCircumCenter(P, Q, R);
    return 0;
}

実行結果

The circumcenter of the triangle PQR is: (3, 4)

この例では、P(6, 0)、Q(0, 0)、R(0, 8) の3点からなる直角三角形の外心が (3, 4) と出力されます。直角三角形の場合、外心は斜辺の中点と一致するため、結果として妥当な値であることが確認できます。

  1. C++で三角形の周囲の長さ(外周)を求める方法

    この記事では、三角形の周囲の長さ(外周)とは何か、三角形の種類ごとの周囲の長さの公式、そしてC++でそれらを求めるプログラムの書き方について詳しく解説します。周囲の長さ(Perimeter)とは周囲の長さとは、図形の外側を1周したときの総距離のことです。基本的には、図形を構成するすべての辺の長さを足し合わせたものになります。三角形の周囲の長さ三角形は3つの辺を持つ図形であるため、その周囲の長さは3辺の長さの合計として求められます。公式:周囲の長さ = すべての辺の合計周囲の長さ = x + y + z三角形の周囲の長さを求めるC++プログラムサンプルコード#include <iostre

  2. C++で三角形の重心を求めるプログラムの作成方法

    この記事では、三角形の3つの頂点の座標を格納した2次元配列が与えられたときに、その三角形の重心を求めるC++プログラムの作成方法を解説します。 三角形の重心とは、三角形の3本の中線がすべて交わる点のことです。 また、三角形の中線とは、ある頂点と、その対辺(向かい合う辺)の中点を結ぶ線分のことを指します。 それでは、具体的な例を使って問題を確認してみましょう。 入力 (-3, 1), (1.5, 0), (-3, -4) 出力 (-1.5, -1) 説明 重心 (x, y) = ((-3 + 1.5 - 3) / 3, (1 + 0 - 4) / 3) = (-1.5, -1) 解法のアプロ