gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:42:26 26 4
gpt4 key购买 nike

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

是否有我可以使用的经过充分测试的优化库函数,或者更好的算法,或者这已经很好了吗?

最佳答案

Apache commons 有一个:

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

normalize an angle between -π and +π

a = MathUtils.normalizeAngle(a, 0.0);

查看源代码,您可以用它来重现它(他们使用他们自己的 FastMath.floor 但如果您想在没有外部库的情况下这样做):

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

来源在这里:https://github.com/apache/commons-math/blob/53ec46ba272e23c0c96ada42f26f4e70e96f3115/src/main/java/org/apache/commons/math4/util/MathUtils.java#L107


future 读者注意:此方法刚刚(2017 年 6 月)been removed来自最新的 commons-math 4.x 代码库。如果您在此之后使用的版本,您将需要使用 commons-numbers相反(一旦发布)- 目前:

a = PlaneAngleRadians.normalizeBetweenMinusPiAndPi(a);

a = PlaneAngleRadians.normalize(a, 0.0);

关于java - 在 Java 中将角度归一化为 +/- π 弧度的标准方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24234609/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com