gpt4 book ai didi

c - 限制纬度和经度值的模数

转载 作者:太空狗 更新时间:2023-10-29 17:00:58 24 4
gpt4 key购买 nike

我有代表纬度和经度的 double 值。
我可以使用以下函数轻松地将经度限制为 (-180.0, 180.0]

double limitLon(double lon)
{
return fmod(lon - 180.0, 360.0) + 180.0;
}

之所以可行,是因为一端是排他性的,而另一端是包容性的。 fmod 包括 0 但不包括 -360.0。

谁能想到一个优雅的纬度方法?
所需的间隔为 [-90.0, 90.0]。封闭形式的解决方案是最好的,即没有循环。我认为 fmod() 可能无法启动,因为现在两端都包含在内。

编辑: 正如所指出的,无论如何都不能到达 91 度纬度。从技术上讲,91 应映射到 89.0。天哪,这改变了一切。

最佳答案

有一种比使用 sin 和 arcsin 更有效的方法来做到这一点。最昂贵的操作是单个除法器。所需间隔闭合的观察结果是关键。

  • 除以 360 并取余数。这会在区间 [0, 360) 中产生一个数字,如观察到的那样,它是半开的。

  • 将区间对折。如果余数 >=180,则用 360 减去它。这会将区间 [180, 360) 映射到区间 (0, 180]。这个区间的并集下半部分是闭区间 [0, 180]

  • 从结果中减去 90。根据需要,此间隔为 [-90, 90]

这确实是与 arcsin(sin(x)) 完全相同的函数,但没有任何费用或任何数值稳定性问题。

关于c - 限制纬度和经度值的模数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13368525/

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