【问题标题】:Great Circle & Rhumb line intersection [closed]大圆线和大黄线交叉口[关闭]
【发布时间】:2010-06-02 00:51:07
【问题描述】:

我有一个纬度、经度和一个以正北度数为单位的行进方向。我想计算我是否会与由另外两个纬度/经度点定义的线相交。

我认为定义线的两个点将创建我的大圆,我的位置和方位角将定义我的 Rhumb 线。

我只对几百公里的交叉路口感兴趣,所以我不需要所有可能的解决方案。

我不知道从哪里开始。

【问题讨论】:

  • 这个问题似乎是题外话,因为它是关于数学而不是编程

标签: geometry intersection great-circle


【解决方案1】:

简单的答案是肯定的 - 如果您从任何纬度/经度开始并继续沿着某个大圆圈行驶,您最终将穿越地球上的所有其他大圆圈。地球上每两个大圆恰好在两个点上相互交叉(两个相同的大圆除外,它们的所有点都相互交叉。)

但我猜你不仅仅是在问一个是/否的问题。您可能想知道,这两个大圆圈到底在哪里相交。我们可以使用以下策略来找出答案:

  1. 每个大圆都位于穿过地球中心的平面上。

  2. 这些平面的交点是一条线(假设它们不是完全相同的平面。)

  3. 那条相交线在两点与地球表面相交——正是我们两个大圆相交的地方。

  4. 因此,我们的任务是:(1) 找到飞机。 (2) 找到它们的交线。 (3) 找到两个交点,最后, (4) 用纬度/经度表示这些交点。 (5) 找出哪个交点更接近您开始的纬度/经度的额外功劳。

听起来不错?以下使用三角和矢量数学来做到这一点。为了稍微简化数学,我们将:

  • 使用unit sphere,以我们的 (x,y,z) 坐标系原点为中心,半径为 1:x^2+y^2+z^2=1。
  • 我们假设地球是一个完美的球体。不是geoid。甚至没有flattened sphere
  • 我们将忽略海拔高度。

第 1 步 - 找到平面:

我们真正关心的是plane normals。以下是我们寻找它们的方法:

--一个大圆是由它穿过的地球上的两个点定义的

法线将是从原点 (0,0,0) 开始的每个点的 (x,y,z) 向量的 cross product。给定每个点的纬度/经度,使用spherical coordinates转换,对应的(x,y,z)为:

x=cos(lat)*sin(lon)
y=cos(lat)*cos(lon)
z=sin(lat)

有了这个,再加上我们给出的两个点 lat1/lon1 和 lat2/lon2,我们可以找出向量 P1=(x1,y1,z1) 和 P2=(x2,y2,z2)。

第一个大圆法线是叉积:

N1=P1 x P2

--另一个大圆是由地球上的一个点和一个方位角定义的

我们有一个点 P3 和一个方位角 T。我们将通过使用 spherical law of cosines (also solved for our convenience here) 在距离为 PI/4 的方位角 T 处穿过 P3 的大圆找到一个点 P4:

lat4=asin(cos(lat3)*cos(T))
lon4=lon3+atan2(sin(T)*cos(lat3),-sin(lat3)*sin(lat4))

那么正常还是和以前一样:

N2=P3 x P4

第 2 步:找到平面相交线:

给定两个平面法线,their cross product defines their intersecting line

L=N1 x N2

第 3 步:找到交点:

只需normalize 向量 L 即可获得单位球面上的交点之一。另一点在球体的另一侧:

X1=L/|L|
X2=-X1

第四步:用纬度/经度表示交点:

给定 X=(x,y,z),再次使用 spherical coordinate conversion,并考虑到该点在单位球面上:

lat=asin(z)
lon=atan2(y,x)

第 5 步:两点中哪一个更接近?

使用haversine formula计算你的点到X1和X2的距离,选择最近的那个。

【讨论】:

  • 我不认为大圆/大圆交叉点是我正在寻找的。我实际上已经实现了。如果我以恒定的方位角行进,我会不会绕着地球盘旋向其中一个极点?至少我在想象自己在正西的一个极点附近旅行,它可能会形成一个平行于赤道的小圆圈。我想我正在寻找小圆/大圆交点或射线/大圆交点(如果存在)。
  • 如果您在正东或正西旅行,您将绕地球一圈,然后回到起点。如果您在真东或真西的某个小数点上持续行驶,但不是真北或真南,您确实会螺旋式到达极点之一。这被称为“恒向线”,它是在现代电子导航设备和可以绘制大圆圈的计算机之前进行空中导航的简单方法。
  • 从问题中不清楚您是否希望保持方位角。那确实会给你一个恒向线路径,它比一个大圆圈更复杂。除非所涉及的距离非常小,否则您将看到一个无限长的抱杆螺旋。维基百科页面 (en.wikipedia.org/wiki/Rhumb_line#Mathematical_derivation) 有描述恒向线曲线的数学。我没有数学来解决 GC/rhumb 交叉点(无限数量的解决方案)。数值方法会通过将搜索限制为(续)来缩小交叉点的范围。
  • (续)单圈,并通过查看 GC 法线的点积符号和您正在测试的点来测试您在 GC 的哪一侧。 en.wikipedia.org/wiki/… 列出了数值方法,而牛顿法可能足够简单和快速,可以快速缩小根范围。
  • @Oren:谢谢,为你 +1。它对我帮助很大,我刚刚发现我可以将 x 和 y 的线反转为平面法线叉积:x=cos(lat)*sin(lon); y=cos(lat)*cos(lon);反转为 y=cos(lat)*sin(lon); x=cos(lat)*cos(lon);
【解决方案2】:

我认为最好的办法是使用stereographic projection 将问题从球体映射到平面。此投影非常有用,因为它将您的恒向线映射到 R=exp(θa) 形式的对数螺线(又名 loxodrome),并将您的大圆映射到平面上的圆。所以你的问题减少到找到一个对数螺旋和一个圆的交点(之后你映射回球体)。

这只是一个让您入门的草图。如果您需要更多详细信息,请询问。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-14
    • 2011-03-16
    • 2012-10-14
    • 2022-01-23
    • 2018-01-17
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    相关资源
    最近更新 更多