java - 为什么我的 SSS 三角形求解器给出了一个完全错误的答案?

标签 java algorithm math geometry

所以我得到了一个项目,在这个项目中,我必须编写一个 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 相匹配。

关于java - 为什么我的 SSS 三角形求解器给出了一个完全错误的答案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58308232/

相关文章:

java - 如何使用静态方法定义嵌套静态类,继承自 Java 中的嵌套接口(interface)?

java - 使用 Webdriver 和 Java 运行自动化脚本时出现意外的数字输出

c# - C#中QuickSort算法的问题

php - 如何用 PHP 创建一个 "Math Square"拼图?

c - C中的二进制补码

java - 如何获取所有 NFC 类型的事件?

java - 如何修复测试依赖项中的拆分包?

algorithm - 在不改变结构的情况下将空二叉树填充为二叉搜索树(节点链接)

algorithm - 找到完成可以按任何顺序完成的操作的最短时间

mysql - 在 MySQL 中按工作日分配每周配额