Вычисление радиуса земли по широте в Python — копирование формулы

Я пытаюсь воспроизвести формулу, которую нашел на этом сайте, она касается расчета радиуса Земли на заданной широте.

https://rechneronline.de/earth-radius/ или https://planetcalc.com/7721/

Затем я использую калькулятор на веб-сайте, чтобы определить, правильно ли я воспроизвел формулу.

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

Пример кода

import math

def radius (B):
  a = 6378.137  #Radius at sea level at equator
  b = 6356.752  #Radius at poles

  c = (a**2*math.cos(B))**2
  d = (b**2*math.sin(B))**2
  e = (a*math.cos(B))**2
  f = (b*math.sin(B))**2

  R = math.sqrt((c+d)/(e+f))


  return R

Например, используя широту 2 (переменная B), веб-сайт вычисляет радиус Земли как 6378,111 км. Мой ответ: 6360,481 км.

Любая помощь будет оценена. заранее спасибо

Эта формула предполагает, что переменная B содержит геоцентрическую широту. Гораздо чаще используются геодезические широты. Например, если вы возьмете широту карты, это будет геодезическая широта. Приемники GPS обычно дают геодезические широты. Формула для радиуса Земли с учетом геодезической широты приведена во второй ссылке, которую вы включаете. Это несколько проще, чем тот, который вы используете.

dmuir 03.06.2019 10:03
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
1
1 209
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

математическая библиотека python принимает радианы в качестве входных данных для тригнометрических функций,

поэтому убедитесь, что вы конвертируете значение B в радианы

это можно сделать B=math.radians(B)

окончательный код:

import math
def radius (B):
    B=math.radians(B) #converting into radians
    a = 6378.137  #Radius at sea level at equator
    b = 6356.752  #Radius at poles
    c = (a**2*math.cos(B))**2
    d = (b**2*math.sin(B))**2
    e = (a*math.cos(B))**2
    f = (b*math.sin(B))**2
    R = math.sqrt((c+d)/(e+f))
    return R

Это потому, что аргументы math.cos и math.sin даны в радианах. Вам нужно преобразовать градусы в радианы в верхней части вашей функции:

B *= math.pi/180

Другие вопросы по теме