0

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

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

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

我不知道从哪里开始。

4

2 回答 2

5

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

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

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

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

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

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

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

  • 使用单位 sphere,它以 (x,y,z) 坐标系的原点为中心,半径为 1:x^2+y^2+z^2=1。
  • 我们假设地球是一个完美的球体。不是大地水准面。甚至不是一个扁平的球体
  • 我们将忽略海拔。

第 1 步 - 找到飞机:

我们真正关心的是平面法线。这是我们如何找到它们的方法:

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

法线将是从原点 (0,0,0) 开始的每个点的 (x,y,z) 向量的叉积。给定每个点的纬度/经度,使用球坐标转换,对应的(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。我们将通过使用余弦球面定律在距离为 PI/4处通过P3 的大圆找到一个点 P4 :

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

然后正常的和以前一样:

N2=P3 x P4

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

给定两个平面法线,它们的叉积定义了它们的相交线

L=N1 x N2

第三步:找到交点:

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

X1=L/|L|
X2=-X1

第 4 步:用 lat/lon 表示交点:

给定 X=(x,y,z),再次使用球坐标转换,并考虑点在单位球面上:

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

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

使用半正弦公式计算您的点到 X1 和 X2 的距离,选择较近的那个。

于 2010-06-02T07:51:55.507 回答
2

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

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

于 2010-06-03T03:45:36.020 回答