给定两个点,A和B,由经度和纬度定义,我想确定另一个点C是否在〜A和B之间〜在〜之间我很难定义。我不是故意的 - 它几乎肯定不会。
Geometric diagram http://www.freeimagehosting.net/uploads/b5c5ebf480.jpg
在该图中,点C在~A和B之间,因为它在点A和B的法线与它们之间的线之间(由细线表示的法线)。 D点不在~A和B之间,而是在~B和F之间〜
另一种说法是我想确定三角形ABC和ABD是否是钝角。
请注意,这些点将非常接近 - 通常在10米之内。
我认为半身定律可能会有所帮助,但我不知道半胱氨酸的反转是什么。
非常感谢所有人的帮助。
答案 0 :(得分:3)
首先,将点转换为局部切平面。我们将使用你的三角形比地球半径小得多的事实。 (切线空间使得两个坐标中的每一个中的相等的增量对应于相等的距离)
这是通过将长度除以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);
Obtuse意味着“它不在线内”,如你所说。我没有检查三角形ABC是否是钝的,但是B和A处的角度是否是钝的。就是这样。
注意:我还没有测试过这段代码。请通过插入不同点告诉我它是如何工作的,如果有错误我会修复它。
答案 1 :(得分:3)
如果您的分数非常接近 - 10米可以轻松获得资格 - 您可以将其近似为2-d问题,并且只计算角度CAB,θ和CBA,φ(使用dot product )。如果θ和φ都小于π/ 2,则C为“之间”。
cos(θ)=( AC · AB )/(| AC | | AB |)
如果这种近似对你来说不够好,你需要spherical trigonometry,这也不是太难。
请注意,如果我正确理解您的问题,您需要检查角度CAB和CBA是否为锐角,而不是角度ACB是钝角还是锐角。