如何在shell脚本中通过x、y坐标计算极坐标的r与theta值
Bash 极坐标转换(x/y坐标转r/θ)实现方案
原代码核心问题:
- 极角θ计算误用正切函数
tan,实际需要用反正切函数,且必须用*atan2(y,x)*自动处理象限问题,直接计算y/x会丢失象限信息还会遇到x为0的除零错误 - Bash原生算术运算仅支持整数,直接写
$((y/x))会对结果强制取整,丢失浮点精度 - 多工具混合调用(bc+awk)逻辑冗余,可统一用awk完成所有浮点计算
完整可运行实现
#!/bin/bash # 参数校验:确保输入2个合法数字参数 if [ $# -ne 2 ] || ! [[ $1 =~ ^-?[0-9]+(\.[0-9]+)?$ ]] || ! [[ $2 =~ ^-?[0-9]+(\.[0-9]+)?$ ]]; then echo "用法:$0 <x坐标> <y坐标>" echo "示例:$0 3 4 或者 $0 -1.5 2.7" exit 1 fi x=$1 y=$2 # 统一用awk完成所有浮点计算,自动处理象限边界问题 awk -v x="$x" -v y="$y" 'BEGIN { pi = 3.141592653589793 # 计算极径r = √(x² + y²) r = sqrt(x*x + y*y) # 计算极角θ(弧度值,范围[-π, π]) theta_rad = atan2(y, x) # 不需要角度输出可以注释掉下面这行 theta_deg = theta_rad * 180 / pi printf "极径r = %.5f\n极角(弧度)= %.5f\n极角(角度)= %.5f\n", r, theta_rad, theta_deg }'
使用示例
以坐标(3,4)为例,执行命令:./polar.sh 3 4
输出结果:
极径r = 5.00000 极角(弧度)= 0.92730 极角(角度)= 53.13010
调整说明
- 不需要角度输出的话,直接删除代码中
theta_deg相关的行即可 - 输出保留的小数位数可以通过修改
printf里的%.5f调整,比如改成%.3f就是保留3位小数 atan2(y,x)内置象限判断逻辑,天然支持x为0、坐标落在第二/三/四象限的所有场景,不需要额外加边界判断
内容的提问来源于stack exchange,提问作者Tejasvi Tarone
相关产品推荐
相关产品推荐

