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

C++で直角三角形の残りの2辺と角度を求める方法

この問題では、直角三角形の一辺を表す整数 a が与えられます。その辺を持つ直角三角形が存在するかどうかを判定し、存在する場合は残りの2辺と各角度を求める必要があります。

入力例

a = 5

出力例

辺 : 5, 12, 13
角度 : 67.38, 22.62, 90

説明

直角三角形の3辺は 52 + 122 = 132 という関係を満たします。これらの辺の値から、角度は sin-1(5/13) および 90 − sin-1(5/13) として求められます。

解法アプローチ

最もシンプルな解法は、ピタゴラスの定理(三平方の定理)を利用することです。直角三角形の3辺は必ず次の関係を満たします。

a2 + b2 = c2

ここで、a と b は三角形の2辺、c は斜辺です。この定理をもとに、与えられた一辺 a から残りの2辺 b と c を計算します。

ケース1:a が偶数の場合

b = (a2 / 4) − 1
c = (a2 / 4) + 1

ケース2:a が奇数の場合

b = (a2 − 1) / 2
c = (a2 + 1) / 2

なお、a = 1 や a = 2 の場合には整数の組み合わせで構成できる直角三角形が存在しないため、-1 を出力して「作成不可」であることを示します。

角度の求め方

3辺が確定したら、余弦定理(コサイン則)を使って各角度を計算できます。

cos(A) = (b2 + c2 − a2) / 2bc
cos(B) = (a2 + c2 − b2) / 2ac
cos(C) = (a2 + b2 − c2) / 2ab

C++では cmath ヘッダーの acos() 関数で逆余弦を求め、その結果(ラジアン)に 180/π を掛けることで角度を度数法に変換できます。

実装例

#include <bits/stdc++.h>
#include <cmath>
using namespace std;
#define PI 3.1415926535

void printAngles(int a, int b, int c) {
    double x = (double)a;
    double y = (double)b;
    double z = (double)c;
    double A = (((double)(acos(((y*y) + (z*z) - (x*x)) / (2*y*z)))) * 180 / PI);
    double B = ((double)(acos(((x*x) + (z*z) - (y*y)) / (2*x*z))) * 180 / PI);
    cout<<"Angles: A = "<<A<<", B = "<<B<<", C = 90";
}

void printOtherSides(int n) {
    int b, c;
    if (n & 1) {
        if (n == 1)
            cout << -1 << endl;
        else {
            b = (n*n-1)/2;
            c = (n*n+1)/2;
        }
    } else {
        if (n == 2)
            cout << -1 << endl;
        else {
            b = n*n/4-1;
            c = n*n/4+1;
        }
    }
    cout<<"Sides : a = "<<n<<", b = "<<b<<", c = "<<c<<endl;
    printAngles(n, b, c);
}

int main() {
    int a = 5;
    printOtherSides(a);
    return 0;
}

出力

Sides : a = 5, b = 12, c = 13
Angles: A = 22.6199, B = 67.3801, C = 90
  1. C++で円を2つの部分に分割したときの角度差の最小値を求めるプログラム

    この記事では、円を構成する各部分(扇形)の角度が格納された配列が与えられたとき、それらを連続的につなぎ合わせて2つの部分に分割した場合の角度差の最小値を求めるC++プログラムを解説します。問題の概要円全体(360度)を構成するすべての部分の角度が配列として与えられます。これらの部分を連続する範囲ごとに結合して2つのグループを作り、それぞれのグループの角度の合計の差が最小になるようにします。重要なのは、離れた位置にある部分(例えば最初の部分と3番目の部分など)を一緒にすることはできないという点です。入力例で理解しましょう入力ang[] = {90, 45, 90, 135}出力90説明1つ目と2

  2. Pythonで直角三角形の斜辺中点と底辺がなす角度を求める方法

    問題概要直角三角形ABCがあり、2つの辺ABとBCの長さが与えられているとします。斜辺ACの中点をMとしたとき、点Mと底辺BCがなす角度を求めるのがこの記事の目的です。例として ab = 6、bc = 4 を入力すると、出力は 56.309932474020215 になります。これは arctan(6/4) ≒ 0.9828 ラジアンであり、これを度数法に変換すると約 56.31 度になるためです。数学的な背景直角三角形では、斜辺の中点Mは外心、つまり3つの頂点から等しい距離にある点になります。したがって MB = MC が成り立ち、三角形MBCは二等辺三角形です。このことから、求めたい角度