在bash中将笛卡尔变换为极坐标

时间:2014-03-17 23:09:58

标签: linux bash math bc

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

我们必须用bash编写代码。以下是我们得到的例子:

script.sh 256 128
Result: 286.216 1.107

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

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

2 个答案:

答案 0 :(得分:1)

一些提示:

  • 使用-l选项bc
  • 您需要sqrt()a()函数
  • 明确哪个值是" x"哪个是" y"
  • 使用scale=3来限制精度
  • bc从stdin
  • 读取其程序

答案 1 :(得分:1)

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

  1. 你可以破解bash。
  2. 你可以破解awk。
  3. 你可以防止bash中的数学
  4. 您可以阻止Radian / Degree表达
  5. 我只是呼叫功能的例子,除非我完成我的程序,你看到我的编程结束时,一些调用函数,它不是我的整个main.write一个主要的。

    我的节目:

    #!/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`