在 C++ 中找到直角三角形的其他两条边和角度

在这个问题中,我们给定一个整数 a 表示直角三角形的一侧。我们需要检查是否有可能有一个边为 a 的直角三角形。如果可能,请找出直角三角形的另外两条边和角。

让我们举个例子来理解这个问题,

输入

a = 5
输出结果
Sides : 5, 12, 13

Angles : 67.38, 22.62, 90

解释

直角的边被发现为 5 2 + 12 2 = 13 2并且使用这些边我们可以找到角是,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 值。

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

以上是 在 C++ 中找到直角三角形的其他两条边和角度 的全部内容, 来源链接: utcz.com/z/355114.html

回到顶部