2

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

返回 true 的方法的要点是,如果您位于应该能够看到这个大圆圈的位置,那么您可以看到的部分将被显示。

要点是你在(lond,latd)有一个半径为10度的小圆,我想知道大圆和小圆是否相交。会有多个大圈,但只有一个小圈。

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

任何帮助将不胜感激

4

2 回答 2

3

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

  1. 使用以下公式将所有经纬度对转换为 (x, y, z) 三元组:x = sin(θ)*cos(φ), y = sin(θ)*sin(φ), z = cos(θ) . 这会给你三个三元组 (x a , y a , z a ), (x b , y b , z b ), (x c , y c , z c )。

  2. 确定经过点 (x a , y a , z a )、(x b , y b , z b ) 和原点 (0, 0, 0) 的平面的笛卡尔坐标中的公式。公式为x+b*y+c*z=0,求bc,这两个方程可以通过将平面公式x+b中的x、y和z代入A点和B点的坐标得到的两个联立方程求得*y+c*z=0。

  3. 使用以下公式计算点 (x c , y c , z c ) 与点 2 中确定的平面之间的距离:d=abs(x c +b*y c +c*z c )/sqrt(1+b *b+c*c)。

  4. 从笛卡尔坐标中的距离,您可以使用以下公式找到点 (x c , y c , z c ) 与由 (θ a , φ a ) 和 (θ b , φ b )确定的大圆之间的角距离: α = asin(d)。

  5. 由于您不应该完全比较浮点数,因此您应该有一个角度阈值,该阈值确定一个点与大圆的距离,以便您仍然考虑该点位于圆上。然后,您将第 4 点中确定的 α 与阈值进行比较,以得出您寻求的布尔值。

于 2011-11-20T22:21:42.327 回答
0

假设您正在处理一个球体,该球体具有点 a 和 b 标记圆弧。并且你在这个球上有 c 点,你想检查 c 是否在 a 和 b 之间的圆弧上......

为此,您可以检查以下内容:

  1. 生成一个平面,该平面由向量 center-to-a 和 center-to-b 形成
  2. 检查点 c 是否与该平面相交(假设该点实际上在球体上,而不是在其表面之上或之下)
于 2011-11-20T22:16:32.350 回答