gpt4 book ai didi

latitude-longitude - 如何检查点(lonc,latc)是否位于从(lona,lata)到(lonb,latb)的大圆上

转载 作者:行者123 更新时间:2023-12-04 06:07:20 25 4
gpt4 key购买 nike

关闭。这个问题是off-topic .它目前不接受答案。












想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。

9年前关闭。




Improve this question




我正在尝试生成一个 bool 方法,如果一个点 (lonc,latc) 位于从 (lona,​​lata) 开始到 (lonb,latb) 结束的大圆弧上,该方法将返回 true

返回 true 的方法的要点是,如果您所在的位置应该能够看到这个大圆圈,则会显示您可以看到的部分。

关键是你在 (lond,latd) 有一个半径为 10 度的小圆,我想弄清楚大圆和小圆是否会相交。会有多个大圆,但只有一个小圆。

我觉得最简单的方法是检查小圆圆周上的任何经纬度是否在大圆线上

任何帮助将不胜感激

最佳答案

您有三个纬度-经度对 (θa, φa)、(θb, φb) 和 (θc, φc),您想确定点 (θc, φc) 是否位于由 (θa, φa) 和 ( θb, φb)。例如,您可以使用以下计算来完成此操作:

  • 使用以下 formulae 将所有纬度-经度对转换为 (x, y, z) 三元组: x = sin(θ)*cos(φ), y = sin(θ)*sin(φ), z = cos(θ)。这会给你三个三元组 (xa, ya, za), (xb, yb, zb), (xc, yc, zc)。
  • 确定通过点 (xa, ya, za), (xb, yb, zb) 和原点 (0, 0, 0) 的平面的笛卡尔坐标中的公式。公式为x+b*y+c*z=0,我们求出b和c,这两个方程可以通过用平面公式x+b中的x、y和z代替点A和B的坐标得到的两个联立方程确定*y+c*z=0。
  • 使用以下 formula 计算点 (xc, yc, zc) 与点 2 中确定的平面之间的距离: d=abs(xc+b*yc+c*zc)/sqrt(1+b*b+c*c)。
  • 从笛卡尔坐标中的距离,您可以使用以下公式找到点 (xc, yc, zc) 与由 (θa, φa) 和 (θb, φb) 确定的大圆之间的角距离:α = asin(d) .
  • 由于您不应该完全比较浮点数,因此您应该有一个角度阈值来确定一个点与大圆的距离,以便您仍然考虑该点位于圆上。然后,您将第 4 点中确定的 α 与阈值进行比较,以得出您寻求的 bool 值。
  • 关于latitude-longitude - 如何检查点(lonc,latc)是否位于从(lona,lata)到(lonb,latb)的大圆上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8204998/

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