角度360度

时间:2014-09-24 14:54:49

标签: java math geometry angle

我在这里编码了这段代码:

     double cosine = (v1.x*v2.x+v1.y*v2.y)/(150*150);               
     double radian = Math.acos(cosine);
     double angle = Math.toDegrees(radian);

V1和V2是两个向量,它们是简单的Point(s)()以保持简单。现在我计算。他们和它之间的角度很好。但超过180度。 ,它又回到了179,178 ......但我希望有360°。

问题是,例如,弧度不会变为负数,因此我可以将其放入if-Segment ......

感谢您的建议。

2 个答案:

答案 0 :(得分:2)

你正在使用两个向量的点积计算它们之间的角度,但是,因为点积是可交换的a.b = b.a - 因此,没有办法获得角度感,只有它的大小(正如你发现的那样) - acos在180º以上是模棱两可的。

请尝试使用atan2。它应该是这样的:

double theta1 = Math.atan2(v1.y, v1.x);
double theta2 = Math.atan2(v2.y, v2.x);
double theta = theta1 - theta2;

请注意,atan2始终在-pi ... pi中返回答案,因此您必须添加pi才能使其在0 ... 2.0 * pi范围内。

答案 1 :(得分:1)

您可以使用标量积和交叉积获得全角度(大多数数学库的-Pi..Pi):

radian = Math.atan2(v1.x*v2.y-v1.y*v2.x, v1.x*v2.x+v1.y*v2.y)