角度问题

时间:2010-11-22 04:02:52

标签: java

您好 这是我的代码的一部分: 我有一个大小为3的列表,我认为最后两个项目在一行(p和q)我需要得到这个列表的第一项与这两个点(p,q)之间的角度

    private Point partition(List<Point> list, Point p, Point q) {



    double x1 = p.getX();
    double x2 = q.getX();
    double y1 = p.getY();
    double y2 = q.getY();
    double pQ = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
    for (int i = 0; i < list.size()-2; i++) {
        double pointX = list.get(i).getX();
        double pointY = list.get(i).getY();
        double pointQ = Math.sqrt((x2 - pointX) * (x2 - pointX) + (y2 - pointY) * (y2 - pointY));
        double pointP = Math.sqrt((pointX - x1) * (pointX - x1) + (pointY - y1) * (pointY - y1));
        double angle = Math.acos((pQ * pQ - pointP * pointP - pointQ * pointQ) /(- 2 * pointP * pointQ));
        System.out.println(angle);


    }

但不是打印第一个项目的角度,而是打印:(第一个项目不在最后两个项目的行中)。

1.6288442476732894

打印此结果的那些点是:

[X :143.0  Y: 217.0, X :93.0  Y: 163.0, X :193.0  Y: 165.0]

请帮助我谢谢。

编辑:真的让我感到困惑。以这种方式打印这个值,对不起所有!!!

2 个答案:

答案 0 :(得分:2)

你的arccos很糟糕,你需要一个括号和-

 arccos((pQ^2 - pointP^2 - pointQ^2)/(-2 * pointP * pointQ))

请参阅How to calculate an angle from three points?

答案 1 :(得分:0)

NaN是一个特殊的双值,意思是“不是数字”。它是由一些“坏”计算产生的:

  • 将0除以0
  • 将无穷大除以无穷大(正负的任意组合)
  • 将0乘以无穷大,无论是正数还是负数,反之亦然
  • 添加负无穷大
  • 从正无穷大减去负数,反之亦然
  • 负数的平方根
  • 负数的对数
  • 数字的反正弦或余弦不在-1和1之间
  • 涉及一个或多个NaN值的任何计算。

检查反余弦函数(acos)的参数结果。我打赌它不在有效范围内。