как рассчитывается в bash atan2 - PullRequest
0 голосов
/ 17 октября 2018

Привет! Я хочу вычислить расстояние между мной и МКС, так что мой код

Я хочу напечатать это предложение:

В настоящее время МКС находится по адресу -30.1461, -50.7975:10010км от нас!

мой код:

#!/bin/bash
pi = 3.14
earthRadiumKm=6371
lat2=48.813875
on2=2.392521
com=$( curl -s 'aletum.jails.simplerezo.com/etna-iss.json' | sed s/\"//g | awk\ -v RS =',' -F: '{print $1 $2 $3}' )
lat1=$( echo $com | cut c-60-66)
lon1=$( echo $com | cut c-42-50)
dLat=$( echo "($lat2 - $lat1) * $pi / 180" | bc -l)
dLat=$( echo "($lon2 - $lon1) * $pi / 180" | bc -l)
l1=$( echo "($lat1) * $pi / 180" | bcc -l)
l2=$( echo "($lat2) * $pi / 180" | bcc -l)
a=$( echo "sinus($dLat / 2) * sinus(dLat / 2) + sinus(dLon / 2) * sinus(dLon / 2) * cosine($l1) * consine($l2) | bc -l)
result=$( echo "2 * atan2(sqrt($a), sqrt(1-$a)) * $earthRaduisKm" | bc -1)
echo "The ISS is currently located at $dLat, $dLon, : ${result}KM from us!"

моя проблема в том, что мои вычисления неверны, потому что результат эхом 0,6 км, и это невозможно, я думаю, что это потому, что я не знаю, какиспользуйте atan2

1 Ответ

0 голосов
/ 18 октября 2018

Веселый маленький проект.Я понятия не имею, правильна ли ваша математика, но ваш код ужасно неправильный:

  • без пробелов вокруг = в присваивании: pi = 3.14 => pi=3.14
  • орфографическая ошибка для имен переменных: earthRadiumKm=... => $earthRaduisKm
  • неправильные имена функций bc
  • неправильные имена системных команд: awk\ -v, bcc -l
  • не закрыто в кавычкахстрока

Рефакторинг:

#!/bin/bash

read lon1 lat1 time < <(
    curl -s 'aletum.jails.simplerezo.com/etna-iss.json' | 
      jq -r '"\(.iss_position.longitude) \(.iss_position.latitude) \(.timestamp)"' 
)

lon2=2.392521
lat2=48.813875

{ read dLat; read dLon; read result; } < <(
    bc -l <<END
        pi = (4*a(1/5) - a(1/239))*4 
        earthrad = 6371
        dlat = ($lat2 - $lat1) * pi/180
        dlon = ($lon2 - $lon1) * pi/180
        a = s(dlat/2) * s(dlat/2) + s(dlon/2) * s(dlon/2) * c($lat1 * pi/180) * c($lat2 * pi/180)
        result = 2 * a( sqrt(a) / sqrt(1-a) ) * earthrad
        dlat
        dlon
        result
END
)

printf "At %s,\n  the ISS is currently located at %.4f,%.4f : %.2f KM from us\n" \
    "$(date -d "@$time" "+%F %T %Z")" \
    "$dLat" "$dLon" "$result"

Результат

At 2018-09-12 08:53:32 EDT,
  the ISS is currently located at 0.5916,-2.2398 : 11296.11 KM from us

Примечания:

  • Повторите, я понятия не имею, если вашматематика верна
  • Подстановки процессов для выполнения некоторого кода и считывания результатов в переменные.
  • использование для анализа JSON
  • Я вставил всю математику в один bc вызов.
  • bc -l использует s для синуса, c для косинуса и a для арктана: прочитайте страницу руководства bc
  • bc не имеет функции arctan2
  • Я использую формулу , чтобы получить немного более точное число пи
  • имена переменных bc должны быть только строчными.
...