在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