在Java中将角度归一化为+/-π弧度的标准方法

Java中是否有库函数或众所周知的快速有效方法将角度标准化为+/-π-例如,在添加两个角度时?

我现在所拥有的(基于此答案)基本上是下面的代码…

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不是一个相对较大的数字,所以我不认为没有循环的纯加减法解决方案。我实际上不知道手动循环可能会与进行比较%

是否有我可以使用的经过测试的优化库函数,或者是更好的算法,或者说它还不错?

回答:

Apache Commons有一个:

http://commons.apache.org/proper/commons-

math/javadocs/api-3.6.1/org/apache/commons/math3/util/MathUtils.html#normalizeAngle(double,double)

归一化-π和+π之间的角度

a = MathUtils.normalizeAngle(a, 0.0);

并查看源代码,您可以使用此代码来复制它(它们使用自己的代码,FastMath.floor但是如果您想在没有外部库的情况下使用它):

theta - TWO_PI * Math.floor((theta + Math.PI) / TWO_PI)

来源在这里:[https](https://github.com/apache/commons-

math/blob/53ec46ba272e23c0c96ada42f26f4e70e96f3115/src/main/java/org/apache/commons/math4/util/MathUtils.java#L107)

//github.com/apache/commons-

math/blob/53ec46ba272e23c0c96ada42f26f4e70e96f3115/src/main/java/org/apache/commons/math4/util/MathUtils.java#L107


:该方法(2017年6月)刚刚从最新的commons-math

4.x代码库中删除。如果您在此之后使用版本,则需要改用commons-

numbers(一旦发布)-当前:

a = PlaneAngleRadians.normalizeBetweenMinusPiAndPi(a);

要么

a = PlaneAngleRadians.normalize(a, 0.0);

以上是 在Java中将角度归一化为+/-π弧度的标准方法 的全部内容, 来源链接: utcz.com/qa/428587.html

回到顶部