【问题标题】:Best way to handle 360 degree range处理 360 度范围的最佳方式
【发布时间】:2015-01-18 22:24:27
【问题描述】:

我需要在 SQL 数据库中选择 0 到 359.9 度的范围。

我的输入是中心角和范围的形式。 例如 center=100 range=50 会给我一个角度>75角度335。

因此我当前的算法是这样工作的:

minangle = center-range/2
maxangle = center+range/2
if minangle<0, then minangle += 360
if maxangle>0, then maxangle -=360

然后在我的查询中

if minangle<maxangle, I query angle>minangle AND angle<maxangle
if minangle>maxangle, I query angle>minangle OR angle<maxangle  

这种方法似乎有点复杂。有更好的方法吗?

【问题讨论】:

  • 使用模数运算。 (angle + range) % 360。其余的将是正确的 0->360 角度。
  • stackoverflow.com/questions/9138790/cant-use-modulus-on-doubles 。对于浮点数和双精度数,请使用 fmod。
  • 这有助于 +360 -360 逻辑。我真的希望有一些方法来避免 (minangle>maxangle) 和改变逻辑

标签: c++ sql qt4


【解决方案1】:

将角度范围更改为 0-720。始终保持 minAngle

如果(最小值 > 最大值) 最大值 += 360;

minAngle = 50 , maxAngle = 200; => 好的

minAngle = 200, maxAngle = 50; => minAngle = 200, maxAngle = 360+50 = 410; => 好的

虽然这会增加您的复杂性。

【讨论】:

  • 我不能改变角度范围,这就是我要找的输入。是的,它确实增加了复杂性。也许没有比这更复杂的方法了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-26
  • 1970-01-01
  • 1970-01-01
  • 2013-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多