【问题标题】:a method to find the nearest multiple of 2pi一种找到最接近 2pi 倍数的方法
【发布时间】:2014-05-07 20:44:14
【问题描述】:

我需要做一个与这个足迹相匹配的高效函数:

public static double NearestAngle(this double currentAngle, double targetAngle);

返回值为targetAngle +/- n*2pi。返回值应使其自身与currentAngle 之间的绝对差异最小化。如何在 C# 中有效地做到这一点?我想避免循环,因为输入可以相隔很多圈。

【问题讨论】:

  • 能不能把返回值说清楚一点?
  • 为什么 n*2pi 中的 n ?你不是在 [0..2pi) 中寻找一个数字吗?或者当前或目标是否可以 > 2pi?
  • @Brannon 将当前角度从目标角度移开。它不应该目标角度移动吗?如果没有,包括目标角度有什么意义?
  • 你越来越糊涂了。 不改变 != 保持在 +/-2pi
  • @Brannon +/- n*2*pi 与“在 +/- 2*pi 以内”不同。请再次尝试编辑您的问题,以准确地说明您的意思。

标签: c# angle


【解决方案1】:
return targetAngle + Math.Round((currentAngle - targetAngle)/(2*Math.Pi))*2*Math.Pi;

【讨论】:

  • @AlexeiLevenkov - 为什么?问题是计算整数因子 k 使得 targetAngle + k * 2 * pi 尽可能接近 currentAngle。 Math.Round 的存在是因为 k 是整数的限制 - 它与弧度与度数无关,因为 k 是无单位的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-26
  • 1970-01-01
  • 2011-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多