答案 0 :(得分:3)
这是跨轨道距离described here
dxt = asin( sin(δ13) ⋅ sin(θ13−θ12) ) ⋅ R
where
δ13 is (angular) distance from start point to third point
θ13 is (initial) bearing from start point to third point
θ12 is (initial) bearing from start point to end point
R is the earth’s radius
您可以使用给定页面中的公式计算所需的距离和方位
distance
a = sin²(Δφ/2) + cos φ1 ⋅ cos φ2 ⋅ sin²(Δλ/2)
c = 2 ⋅ atan2( √a, √(1−a) )
d = R ⋅ c
where
φ is latitude, λ is longitude, R is earth’s radius (mean radius = 6,371km);
bearing
θ = atan2( sin Δλ ⋅ cos φ2 , cos φ1 ⋅ sin φ2 − sin φ1 ⋅ cos φ2 ⋅ cos Δλ )
where
φ1,λ1 is the start point, φ2,λ2 the end point (Δλ is the difference in longitude)
请注意,角度需要以弧度为单位才能传递给trig函数
答案 1 :(得分:2)
球形到2D笛卡儿
如果距离不是太远且不是极点奇点,你可以将从你的点和垂直于你的线段的线段和线发射转换为球面坐标(如果它们还没有)并使用2个角度作为笛卡尔空间(忽略半径)。
计算点和交点之间的arclength
很难说你是否正在使用球体或WGS84或者什么......
笛卡尔3D
您可以将圆弧段处理为3D线,并且当找到交叉点时将其投影回曲面上。像这样:
将其投射回表面
对于球面,这很容易,因为投影意味着只需将矢量长度更改为R
(如果球体以(0,0,0)
为中心)。
计算2点之间的arclength
对于球面也很简单,只计算交点和点之间的角度......
ang = acos(dot(intersection,point)); // [radians]
并转换为arclength
d = ang*R; // [same Units as R]