我在这里编写了这段代码:
double cosine = (v1.x*v2.x+v1.y*v2.y)/(150*150);
double radian = Math.acos(cosine);
double angle = Math.toDegrees(radian);
V1 和 V2 是两个 vector ,它们是简单的 Point(s)() 以保持简单。现在我计算。它们之间的角度很好用。但是超过180度。 , 又变成了179,178... 但是我想要360°。
问题是,例如弧度不会变成负数,所以我可以将它放在 if-Segment 中......
感谢您的建议。
最佳答案
您正在使用两个 vector 的点积来计算它们之间的角度,但是,由于点积是可交换的 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 范围内。
关于java - 360 度角,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26020090/