You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 05:06:03