在C++中求直角三角形的其他兩條邊和角度


在這個問題中,我們給定一個整數a,表示直角三角形的一條邊。我們需要檢查是否可以有一個邊長為a的直角三角形。如果可以,則找到直角三角形的其他兩條邊和角度。

讓我們舉個例子來理解這個問題:

輸入

a = 5

輸出

Sides : 5, 12, 13
Angles : 67.38, 22.62, 90

解釋

直角邊的長度可以透過 52 + 122 = 132 計算得出。利用這些邊長,我們可以計算出角度:Sin-1 (5/13) 和 90 - Sin-1 (5/13)。

解決方案方法

解決這個問題的一個簡單方法是使用勾股定理。我們知道直角三角形的邊長遵循勾股定理,即

a2 + b2 = c2

其中a和b是三角形的兩條直角邊,c是斜邊。

利用這個定理,我們將使用a計算b和c的值。

**情況1** - 如果a是偶數,

c = (a2 + 4) + 1
b = (a2 + 4) - 1

**情況2** - 如果a是奇數,

c = (a2 + 1)/ 2
c = (a2 - 1)/ 2

為了求角度,我們需要找到三角形的邊長,並利用這些值求出餘弦值。

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

程式演示了我們解決方案的工作原理:

示例

 線上演示

#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

更新於:2021年3月16日

450 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告