您好 这是我的代码的一部分: 我有一个大小为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]
请帮助我谢谢。
编辑:真的让我感到困惑。以这种方式打印这个值,对不起所有!!!
答案 0 :(得分:2)
你的arccos很糟糕,你需要一个括号和-
:
arccos((pQ^2 - pointP^2 - pointQ^2)/(-2 * pointP * pointQ))
答案 1 :(得分:0)
NaN
是一个特殊的双值,意思是“不是数字”。它是由一些“坏”计算产生的:
检查反余弦函数(acos
)的参数结果。我打赌它不在有效范围内。