1

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

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

script.sh 256 128
Result: 286.216 1.107

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

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

4

2 回答 2

1

一些技巧:

  • 使用-lbc 选项
  • 你需要sqrt()anda()函数
  • 清楚哪个值是“x”,哪个是“y”
  • 用于scale=3限制精度
  • bc从标准输入读取它的程序
于 2014-03-18T01:39:22.297 回答
1

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

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

我只是调用函数的例子,除非我完成我的程序,你会在我的 prog 结尾看到一些调用函数,这不是我的整个 main.write 一个 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`
于 2014-03-18T02:03:11.610 回答