当前位置: 首页 > 面试题库 >

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

符棋
2023-03-14
问题内容

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);


 类似资料:
  • 问题内容: 我正在尝试在用户创建对象时从x,y获得以度为单位的alpha角度。 我写了以下构造函数: 我是正确的_alpha现在是一个以度为单位的角度,而不是我从atan()方法获得的弧度吗? 有一个简单的方法吗? 谢谢 ! 问题答案: 为什么不使用Java SE附带的内置方法。

  • 本文向大家介绍Python中转换角度为弧度的radians()方法,包括了Python中转换角度为弧度的radians()方法的使用技巧和注意事项,需要的朋友参考一下  radians()方法把角度转化为弧度角x。 语法 以下是radians()方法的语法: 注意:此函数是无法直接访问的,所以我们需要导入math模块,然后需要用math的静态对象来调用这个函数。 参数     x -- 这必须是一

  • 我想在两点之间画一条弧线。我知道两个点的位置和弧度的角度。我成功地写了一个小程序来计算圆心,有效地画出了圆弧。但是当我画一个圆来验证时,当我用小的弧度值时,圆线不交叉给出的两点。 但两点到圆心的距离等于计算半径。我哪里错了?

  • 问题内容: 我正在尝试将此代码转换为代码,但我不知道该代码应该是什么? 我用Google搜索并找到了这个 但是我不明白如何在Swift中转换它? 问题答案: Xcode 11•Swift 5.1或更高版本 操场 如果要使二进制整数返回浮点类型而不是始终返回CGFloat,则可以使通用方法代替计算属性:

  • 问题内容: 在模块中,我只能找到带有cos / sin / tan / acos / asin / atan的。这将返回以弧度为单位的答案。如何获得度数的答案? 这是我的代码: 我的度数计算器为我提供: 问题答案: Python在包中包括两个函数;将度数转换为弧度,并将弧度转换为度。 要匹配计算器的输出,您需要: 请注意,所有的三角函数都在角度和三角形两侧的比率之间转换。cos,sin和tan以弧

  • 本文向大家介绍归一化和标准化的区别?相关面试题,主要包含被问及归一化和标准化的区别?时的应答技巧和注意事项,需要的朋友参考一下 归一化: 把数据变成(0,1)之间的小数 把有量纲表达式变成无量纲表达 标准化: 将数据按比例缩放,去除数据单位的限制,将其转化为无量纲的纯数,便于不同单位或量级的指标能够进行比较和加权