java - 为什么我的 SSS 三角形求解器给出完全错误的答案?
问题描述
所以我得到了一个项目,在这个项目中我必须编写一个 Java 程序来返回一个三角形的边之间的角度,给定这三个边作为方法的参数。有一个数学公式可以用来推导我们可以使用的方程,称为余弦定律,给定三角形 a、b 和 c 的边,c^2 = a^2 + b^2 - 2ab * cos(C) 其中 C 是边 a 和 b 之间的某个角度。我们可以隔离角度 C 并得到等式arccos((-c^2 + a^2 + b^2) / 2ab) = C。数学很简单,在 Java 中也很容易实现,但是当我输入边 3、4、5 时,应该会产生 90、30、60 的输出,我得到的角度是 53.130102、36.86989、90.0。这些绝对不是毕达哥拉斯三元组的角度,如 3、4、5。有谁知道我哪里出错了?
代码:
import static java.lang.Math.sqrt;
import static java.lang.Math.acos;
import static java.lang.Math.pow;
import static java.lang.Math.PI;
class Main {
public static void main(String[] args) {
anglesFinder(3, 4, 5);
}
public static void anglesFinder(int a, int b, int c) {
double alpha;
double beta;
double gamma;
alpha = (double) Math.acos((Math.pow(b, 2) + Math.pow(c, 2) - Math.pow(a, 2)) / (2 * c * b));
beta = (double) Math.acos((Math.pow(a, 2) + Math.pow(c, 2) - Math.pow(b, 2)) / (2 * a * c));
gamma = (double) Math.acos((Math.pow(a, 2) + Math.pow(b, 2) - Math.pow(c, 2)) / (2 * a * b));
System.out.println("angle between a & b is: " + (beta * (180 / Math.PI)));
System.out.println("angle between a & c is: " + (alpha * (180 / Math.PI)));
System.out.println("angle between b & c is: " + (gamma * (180 / Math.PI)));
}
}
解决方案
你的程序是正确的,但你是不正确的。对于(比例)长度为 1、sqrt(3)/2(约 0.866)和 2 的边的直角三角形,预期的角度为 30、60 和 90 度,它不会按比例缩放到长度 3、4、和 5。
我的计算器为 53.130102 度的余弦给出了大约 0.6,为 36.86989 度的余弦给出了大约 0.8,这与长度 3、4 和 5 匹配。
推荐阅读
- python - Python Pandas 在 JupyterNotebook 中以默认格式打印 Dataframe.describe()
- pycord - 如何在 pycord 中创建下拉角色?
- database - cosmos db 索引策略中的空包含路径
- javascript - 使带有多边形的svg文件可点击
- android - 谁能帮我解决flutter i中的这个gradle构建问题,已经尝试更新build.gradle并安装android工具链
- android - Flutter - 错误:没有方法签名:build_alrohbcqffdojo30hcvnhe46c.android() 适用于参数类型:
- reactjs - 使用 setHovered() 时如何更改网格,试图让它们单独更改
- javascript - 调试器打开一个未知的“源”文件
- javascript - 我的地图函数返回 React 组件时出错
- c# - 如何使用 AutoMapper 合并数组?