【问题标题】:how calculated in bash atan2如何在 bash atan2 中计算
【发布时间】:2018-10-17 20:57:22
【问题描述】:

你好,我想计算我和国际空间站之间的距离,所以这是我的代码

我想打印这句话:

国际空间站目前位于 -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

【问题讨论】:

  • 您有问题吗?
  • 来吧,所有这些代码,你不能做echo "The ISS is currently located at $dLat, $dLon, $l1,: ${result}KM from us!"?! ? ;-) 根据需要修复。祝你好运。
  • 是,但没有出现结果
  • 您似乎有引用问题,请注意问题中突出显示的问题。
  • 您错过了应该连接到 bca= 行的末尾。

标签: bash bc


【解决方案1】:

有趣的小项目。我不知道您的数学是否正确,但您的代码非常错误:

  • 分配中 = 周围没有空格:pi = 3.14 => pi=3.14
  • 变量名拼写错误:earthRadiumKm=... => $earthRaduisKm
  • 不正确的 bc 函数名称
  • 不正确的系统命令名称:awk\ -vbcc -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

注意事项:

  • 重复一遍,我不知道你的数学是否正确
  • Process Substitutions 执行一些代码并将结果读入变量。
  • 使用解析JSON
  • 我将所有数学运算都集中到一个 bc 调用中。
  • bc -l 使用 s 表示正弦,c 表示余弦,a 表示反正切:阅读 bc 手册页
  • bc 没有arctan2 函数
  • 我使用a formula 来获得更精确的 pi
  • bc 变量名必须全部小写。

【讨论】:

  • 不错!但我很惊讶你没有选择awk。除了(旧)awk 之外的任何东西似乎都有atan2。祝大家好运。
  • 是的,我被困在了土地上。除了我显然不再记得的所有数学之外,唯一需要担心的是a 变量是否等于 1。在这种情况下,尽管国际空间站将无限远,所以我们手头还有其他更紧迫的事情.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-04
  • 2020-04-28
  • 2020-04-01
  • 1970-01-01
  • 2020-03-27
  • 1970-01-01
相关资源
最近更新 更多