【发布时间】:2014-08-05 17:48:34
【问题描述】:
在 Java 中是否有库函数或众所周知的快速有效方法将角度标准化为 +/- π - 例如什么时候加两个角?
我现在得到的(基于this answer)基本上是下面的代码......
private static final double TWO_PI = 2 * Math.PI;
double normalize(double theta) {
double normalized = theta % TWO_PI;
normalized = (normalized + TWO_PI) % TWO_PI;
return normalized <= Math.PI ? normalized : normalized - TWO_PI;
}
...但它似乎有点复杂和性能方面我对模运算符并不感到兴奋。 (请注意,我不能保证theta 不是一个相对较大的数字,所以我认为没有没有循环的纯加法/减法解决方案。我实际上不知道手动循环可能如何与%比较。)
是否有我可以使用的经过良好测试的优化库函数,或者更好的算法,或者这是否已经达到了最好的水平?
【问题讨论】:
-
您要四舍五入到最接近的 90 度(半 pi)或最接近的 180 度(全 pi)?
-
@Kon 180 度/全圆周率。
-
@StefanoSanfilippo 我已经阅读了该答案,但鉴于大多数 Java 数学/几何库都是以弧度为单位的,因此以弧度为单位的答案似乎比以度为单位的答案更好。
-
...事实上@CupawnTae 提供了一个library function answer。