【问题标题】:How to calculate distance between two coordinates (without floats)?如何计算两个坐标之间的距离(没有浮点数)?
【发布时间】:2012-03-08 15:33:54
【问题描述】:

我需要在没有浮点类型的嵌入式系统上计算两个坐标(经度、纬度)之间的距离(只有整数可用,所以没有三角函数,也没有像 sqrt 这样的浮点运算)。

这些点彼此非常接近,因此准确性不是问题。

所以我不能使用Haversine formula。我也不能使用这个基于毕达哥拉斯定理和equirectangular projection的简单算法:

x = Δlon * cos(lat)
y = Δlat
d = R * √(x² + y²)

因为我没有 cos 和 sqrt 函数。也许我可以以某种方式实现它们,但是这个算法必须很快(嵌入式系统)。

我最好的选择是毕达哥拉斯定理,但是如何在没有三角函数(也没有 sqrt)的情况下从度数到米数?

【问题讨论】:

  • 你说“(没有浮点数)”并且你没有浮点运算 - 你的意思是你只有整数可以使用,还是你的意思是你有浮点数和一些一组操作(add、mul,也许是 sub 和 div)但不是 sqrt 和 trigs?
  • 我只能处理整数。

标签: math language-agnostic gps geospatial


【解决方案1】:

传统上,水手会使用遍历表进行此类计算——请参阅American Practical Navigator 的第 24 章。这表明如果trigsqrt 不在等式中,您可能会实现一个查找表——用空间换取复杂性。根据您的精确需求,您可能只需要您感兴趣的纬度的部分遍历表。

【讨论】:

  • 这是一个很好的链接(美国实用导航员)。我认为这可能有助于解决我的问题。
【解决方案2】:

实际上,您确实可以使用 sqrt 功能。查看Newton's method。这并不完美,因为你显然只有整数可以使用,我认为这意味着你的尾数会在每一步都被砍掉,但这是一个选择。还有其他平方根近似值。 (要实现余弦函数,也许您可​​以使用泰勒近似值,但我不确定它在这里的效果如何。)

【讨论】:

    【解决方案3】:

    根据您的用例,出租车/城市街区距离可能会有所帮助: https://en.wikipedia.org/wiki/Taxicab_geometry

    【讨论】:

      【解决方案4】:

      地球上的每一度是 111133.333 米。

      如何在没有 sqrt 的情况下到达那里是另一回事!想一想您使用的系统/软件没有这个基本的数学功能,我有点茫然?

      您可以通过将所有内容提高到 1000 次方来解决浮点问题。这就是我们过去使用 Java ME 所做的事情(如果我没记错的话!!!)

      【讨论】:

      • “在历史上,米被法国科学院定义为铂铱棒上两个标记之间的长度,它被设计为代表从赤道到地球距离的 1/10,000,000北极穿过巴黎”所以是的,1 纬度是 ~111133.333 米,通常是 ~104-113 公里(低误差)。但是1度的经度变化更大......
      • 嵌入式系统或 DSP 通常没有浮点计算。它不像人类看起来那么基本:)
      • 这个答案具有误导性。作为第一个陈述的反论点,高纬度的经度长度可能比建议的要小得多,因为它在 +/- 90 度处消失为 0。航海家们都知道,纬度的长度也不是恒定的。我认为@Christy Herron 的意思是“乘以 1000”而不是“提高到 1000 的幂”。为什么即使是前一种方法也能在没有浮点运算的机器上引起兴趣,我不确定。
      • @High Performance Mark,对不起你的权利 - 我应该让自己更清楚。赤道的度数是 111133.333 米。至于乘以1000;我只是说你应该减少你的测量单位。因此,使用毫米而不是米是解决浮点问题的一种方法
      猜你喜欢
      • 2020-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多