我在这里编码了这段代码:
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 ......
感谢您的建议。
答案 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)