java - 360 度角

标签 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 是两个 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/

相关文章:

java - 如何确保执行最新版本的类文件?

java - MyBatis 解析具有多个语句的参数

javascript - compass 航向 - 多次旋转

python - 如何以数组形式返回正方形上的点?

geolocation - 可以使用 S2 库找到 K 个最近点(并且有效)?

java - 在 fat jar 中编译应用程序时生成 jasper 报告的问题

java - 设置请求参数的大小限制

bash 和 bc 带小数点的数学计算

c++ - 如何根据四个旋转和缩放的点绘制椭圆?

postgresql - 在 postgis/postgresql 中计算点距离