代码之家  ›  专栏  ›  技术社区  ›  Sarge

确定球面三角形是否为钝角

  •  1
  • Sarge  · 技术社区  · 16 年前

    给定由经度和纬度定义的两个点A和B,我想确定另一个点C是否在~A和~B之间~我很难定义两者之间的关系。我不是说在线上——几乎肯定不会。

    Geometric diagram http://www.freeimagehosting.net/uploads/b5c5ebf480.jpg

    在该图中,点C位于~A和~B之间,因为它位于点A和B的法线和它们之间的直线之间(法线由细线表示)。点D不在~A和~B之间,但在~B和~F之间。

    请注意,这些点将非常接近-通常在10米范围内。

    非常感谢你的帮助。

    2 回复  |  直到 16 年前
        1
  •  3
  •   Pavel Radzivilovsky    16 年前

    首先,从将点转换为局部切线平面开始。我们将利用你的三角形比地球半径小得多这一事实(切线空间是这样的:两个坐标中的每个相等的三角形对应相等的距离)

    这是通过将长度除以sin(lat)来实现的:

    A_local_x = A_lat_rads;
    A_local_y = A_lon_rads/sin(A_lat_rads);
    

    那么,

    double ABsquared = (A_local_x - B_local_x)*(A_local_x - B_local_x) + (A_local_y - B_local_y)*(A_local_y - B_local_y);
    double BCsquared = ..., ACsquared.
    

    最后:

    bool obtuse = (ABsquared+BCsquared < ACsquared) || (ABsquared+ACsquared < BCsquared); 
    

    钝的意思是“它不在直线内”,正如你所说。我不是在检查三角形ABC是否为钝角,而是在B和A处的角是否为钝角。就这样。

    注: 我还没有测试过这段代码。请告诉我如何通过插入不同的点工作,如果有一个错误,我会修复它。

        2
  •  3
  •   Alok Singhal    16 年前

    如果你的点非常接近-10米可以很容易地证明你可以将其近似为二维问题,只需计算角度CAB,θ和CBA,φ(使用 dot product ). 如果θ和φ都小于π/2,那么C是介于两者之间的。

    cos(θ)=( AB 自动控制 | | |)

    spherical trigonometry ,这也不难。