我正在开发一个小码,我需要计算赤道平面中的角度差(即经度差)作为角度差的函数一个大圆平面(由给定的纬度参数化)。大圆距离的赤道平面的NAN值和计算角
我用下面的公式从this wikipedia link:
d(sigma) = arcos (sin(phi1).sin(phi2) + cos(phi1).cos(phi2).cos(d(lambda))
的目标是计算角度的d(lambda)
差。在我的代码,输入参数是:
radius = 50 phi1 = 0 phi2 = initial latitude describe below d(sigma) = (distance/theta) where theta is the local angle in great circle plane and distance is the perimeter of this great circle.
在大圆面局部角度theta
从0
开始,由0.01 step
递增。
知道phi1
,phi2
,distance
和theta
,我可以表达d(lambda)
如(在Javascript语言):
var distance = radius*Math.abs(theta);
var deltaLambda = Math.acos(Math.cos(distance/radius)/Math.cos(angleTheta));
angleTheta
哪里是起始点(由coordTorus
THREE.Vector3标识)的纬度和等于:
var angleTheta = Math.atan(coordTorus.y/Math.sqrt(coordTorus.x * coordTorus.x + coordTorus.z * coordTorus.z));
我的问题是,等于的angleTheta
的初始值,初始theta
值等于0
,那么deltaLambda
的计算是好的,但不是在其他情况下:
让我们例如angleTheta = PI/4
和theta = 0
的初始值,然后我有deltaLambda
的NAN value
因为在上述公式,我得到:
var deltaLambda = Math.acos(Math.cos(0.5/50)/Math.cos(Math.PI/4));
所以我得到Math.acos(sqrt(2)) = NAN
我怎么能绕过这个问题,并找到一个窍门与内部值保持进入[-1,1]
区间?
我在上面的链接看到有其他计算大圆距离的公式,但我需要用这些公式隔离d(lambda)
变量,我的意思是d(lambda)
作为其他参数的函数的符号表达式。
如果有人可以给出另一个一致的公式或找到一种方法来避免NAN value error
,这将是很好的。
在此先感谢。
OK,这个问题似乎来自于THETA起始角(进入大圆面),但我不知道在这方面采取局部平面和赤道平面成相应角度的参数值。 – youpilat13