【问题标题】:Convertin Cartesian to Polar in bash在 bash 中将笛卡尔坐标转换为极坐标
【发布时间】:2014-03-17 23:09:57
【问题描述】:

我们完成了将笛卡尔坐标转换为极坐标的作业,但我什至不知道如何开始。所以任何一点帮助都会很好。

我们必须用 bash 编写代码。这是我们得到的示例:

script.sh 256 128
Result: 286.216 1.107

我们必须插入数字作为参数,我们必须使用 bc 解释器。

http://linux.die.net/man/1/bc

【问题讨论】:

  • 如果您的困难是理解如何从笛卡尔坐标转换为极坐标,您可以尝试网页Polar and Cartesian Co-ordinates。如果您的困难是如何在bc 中执行此操作,或者如何将参数捕获到bash 脚本并将它们提供给bc,您可以尝试一个示例(查看显示的一些相关问题和答案此页面右侧)然后您可以修改您的问题以显示您的具体问题。

标签: linux bash math bc


【解决方案1】:

因为这是你的作业,我写了你的程序,但我把钩子放进去了。我的任务对你有一些好处:

  1. 你可以破解 bash。
  2. 你可以破解 awk。
  3. 你可以防止 bash 中的数学运算
  4. 您可以防止弧度/度数表达

我只是调用函数的例子,除非我完成了我的程序,你会在我的 prog 的末尾看到一些调用函数,它不是我的整个 main。为它写一个 main。

我的程序:

#!/bin/bash

### X and Y 
export x=$1
export y=$2

####calculating r:

export r=`echo "sqrt(x*x+y*y)" |bc -l ` 


####Radian to Degree
r2d(){
    echo "180,3.14156265358979323846,`echo  $1`" |awk ' BEGIN {FS=","} { print $1/$2*$3'} ###HOOK

}
####Degree to Radian
d2r(){

    echo "180,3.14156265358979323846,`echo  $1`" |awk ' BEGIN {FS=","} { print $2/$1*$3'} ###HOOK
}

teta(){
    if [ $x -lt 0 ];then 

        echo `echo "$1,$2" | awk 'BEGIN {FS=","} {print 3.14156265358979323846+atan2($2/$1,1)'}`  ####HOOK
    fi;

    if [ $x  -gt 0 ];then 
        echo `echo "$1,$2" | awk 'BEGIN {FS=","} {print atan2($2/$1,1)'}`  ####HOOK
    fi;
}

echo `r2d 2.09`
echo `d2r 120`
echo `teta $x,$y`

【讨论】:

  • 为什么要导出xyr
【解决方案2】:

一些提示:

  • 使用-l 选项进行密件抄送
  • 您将需要 sqrt()a() 函数
  • 清楚哪个值是“x”,哪个是“y”
  • 使用scale=3 限制精度
  • bc 从标准输入读取程序

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多