Python – Vincenty的逆公式不收敛(寻找地球上的点之间的距离)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python – Vincenty的逆公式不收敛(寻找地球上的点之间的距离),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1639字,纯文字阅读大概需要3分钟。
内容图文
我正在尝试实现Vincent的逆问题,如wiki HERE所述
问题是lambda根本就没有收敛.如果我尝试迭代公式序列,则值保持不变,我真的不确定原因.也许我只是盯着一个明显的问题.
应该注意的是,我是Python新手并且仍在学习该语言,所以我不确定它是否会误用可能导致问题的语言,或者我是否在执行的某些计算中遇到一些错误.我似乎无法在公式中发现任何错误.
基本上,我已经在代码中写了尽可能接近wiki文章的格式,结果如下:
import math
# Length of radius at equator of the ellipsoid
a = 6378137.0
# Flattening of the ellipsoid
f = 1/298.257223563
# Length of radius at the poles of the ellipsoid
b = (1 - f) * a
# Latitude points
la1, la2 = 10, 60
# Longitude points
lo1, lo2 = 5, 150
# For the inverse problem, we calculate U1, U2 and L.
# We set the initial value of lamb = L
u1 = math.atan( (1 - f) * math.tan(la1) )
u2 = math.atan( (1 - f) * math.tan(la2) )
L = (lo2 - lo1) * 0.0174532925
lamb = L
while True:
sinArc = math.sqrt( math.pow(math.cos(u2) * math.sin(lamb),2) + math.pow(math.cos(u1) * math.sin(u2) - math.sin(u1) * math.cos(u2) * math.cos(lamb),2) )
cosArc = math.sin(u1) * math.sin(u2) + math.cos(u1) * math.cos(u2) * math.cos(lamb)
arc = math.atan2(sinArc, cosArc)
sinAzimuth = ( math.cos(u1) * math.cos(u2) * math.sin(lamb) ) // ( sinArc )
cosAzimuthSqr = 1 - math.pow(sinAzimuth, 2)
cosProduct = cosArc - ((2 * math.sin(u1) * math.sin(u2) ) // (cosAzimuthSqr))
C = (f//16) * cosAzimuthSqr * (4 + f * (4 - 3 * cosAzimuthSqr))
lamb = L + (1 - C) * f * sinAzimuth * ( arc + C * sinArc * ( cosProduct + C * cosArc * (-1 + 2 * math.pow(cosProduct, 2))))
print(lamb)
如上所述,问题是值“lamb”(lambda)不会变小.我甚至试图将我的代码与其他实现进行比较,但它们看起来差不多.
我在这做错了什么?
内容总结
以上是互联网集市为您收集整理的Python – Vincenty的逆公式不收敛(寻找地球上的点之间的距离)全部内容,希望文章能够帮你解决Python – Vincenty的逆公式不收敛(寻找地球上的点之间的距离)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。