NAN值和赤道平面上的计算角度很大
我正在开发一个小代码,我需要根据大圆平面(由给定的纬度参数化)中的角度差来计算赤道平面中角度的差异(即经度差异)。
我从这个维基百科链接使用了以下公式:
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
的初始值等于0
,初始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
我怎么能绕过这个问题,并找到一个把Math.accos
里面的值保持在[-1,1]
区间的技巧?
我在上面的链接中看到有其他计算大圆距离的公式,但我需要用这些公式来隔离d(lambda)
变量,我的意思是d(lambda)
作为其他参数的函数的符号表达式。
如果有人可以给出另一个一致的公式或找到避免NAN value error
,这将是很好的。
提前致谢。
对于lat1 = 0,lat2 = 45,大圆距离是半径的1/100! 最小可能的d是Sqrt(2)/2 * R
所以你采取非法的起始数据进行计算。
另一个问题 - 从笛卡尔坐标获得纬度的错误公式。 正确对象,真爱:
lat = Arccos(z/R)
or
lat = atan(Sqrt(x^2+y^2) / z)
链接地址: http://www.djcxy.com/p/14879.html
上一篇: NAN value and computing angle in equatorial plane with great
下一篇: Calculating the fraction of the area of multiple squares overlapped by a circle