Значение NAN и вычислительный угол в экваториальной плоскости с расстоянием большого круга

Я разрабатываю небольшой код, с помощью которого мне нужно вычислить разность углов в экваториальной плоскости (i.e разность длин) как функция разности углов в плоскости большого круга (параметризованной заданной широтой).

Я использовал следующую формулу из этой ссылки Википедии :

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тремя.Vector3) и равны :

var angleTheta = Math.atan(coordTorus.y / Math.sqrt(coordTorus.x * coordTorus.x + coordTorus.z * coordTorus.z));

Моя проблема заключается в том, что для начального значенияangleTheta, равного0, начальное thetaзначение равно0, то вычисление deltaLambdaхорошо, но не в других случаях :

Возьмем для примера начальное значение angleTheta = PI/4andtheta = 0, тогда у меня есть NAN valuefordeltaLambda, потому что в приведенной выше формуле я получаю :

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, это было бы хорошо.

Спасибо заранее.

1 ответ

  1. Невозможно, чтобы при lat1=0, lat2=45 большое расстояние окружности составляло 1/100 радиуса! Минимально возможный d Sqrt(2)/2 * R. Таким образом, вы принимаете незаконные исходные данные для вычислений.

    Еще одна проблема-неправильная формула для получения широты из декартовых координат. Правый:

    lat = Arccos(z/R) 
    or 
    lat = atan(Sqrt(x^2+y^2) / z)