直角坐标系坐标转换为极坐标系

本文介绍了直角坐标系和极坐标系的基本概念,并提供了Python代码实现从直角坐标到极坐标以及从极坐标回转后的直角坐标的转换,特别处理了极坐标系顺时针旋转的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直角坐标系与极坐标系介绍

直角坐标系

直角坐标系简单来说就是x轴与y轴垂直建立坐标系,共享原点,x轴以向右为正方向,y轴以向上为正方向。以一组(x,y)来表示坐标系中的点,其中x为沿此点做x轴的垂线与x轴的交点位置,y同理。

极坐标系

极坐标系简单来说就是原点向右为ρ轴,此轴为0度位置,沿逆时针方向角度增加。以一组(ρ,θ)(其中ρ≥0)来表示坐标系中的点,其中ρ为此点距原点的距离,θ为此点与原点连线与ρ轴的夹角。

直角坐标系与极坐标系互相转换

极坐标系转换为直角坐标系

这个很简单,直接使用如下公式即可:
x = ρcosθ
y = ρ
sinθ

直角坐标系转换为极坐标系

这里就是本文的重点,也是为什么写这一篇文章的原因:如何将直角坐标上的点转换为极坐标。
ρ的求取很简单,ρ=sqrt(x2 + y2)
角度的话一般来说会使用反三角函数求出改点在极坐标系的弧度,
但是这里我们需要注意到反三角函数求取的范围在-π/2至π/2之间,
因此需要区分象限得到正确的角度。
这里我们使用arcsinθ,因为arctanθ要求x不为0
当点位于第一、四象限时,arcsin(y/ρ)即为角度;点位于第二象限时,arcsin(y/ρ)>0.角度可表示为180-θ;点位于第三象限时,arcsin(y/ρ)<0.角度可表示为180-θ

Python代码如下

import numpy as np

def zj_to_j(d_zj):
    r = np.sqrt(d_zj[0]*d_zj[0]+d_zj[1]*d_zj[1])
    # 点位于第一、四象限时,arcsin(y/r)即为角度;点位于第二象限时,arcsin(y/r)>0.角度可表示为180-θ;点位于第三象限时,arcsin(y/r)<0.角度可表示为180-θ
    if d_zj[0]<0:
        theta = np.pi - np.arcsin(d_zj[1]/r)  # arctan 需要x坐标不等于0,不适合x>=0的情况
    else:
        theta = np.arcsin(d_zj[1]/r)  # arctan 需要x坐标不等于0,不适合x>=0的情况
    if theta<0:   # 当点位于第四象限时,+360度使其为正值
        theta += 2*np.pi
    return (r,np.degrees(theta))

d_zj1 = (3,-2)
d_zj2 = (-3,-2)
d_zj3 = (3,2)
d_zj4 = (-3,2)

print(zj_to_j(d_zj1),zj_to_j(d_zj2),zj_to_j(d_zj3),zj_to_j(d_zj4))

实际问题

这篇文章当然不是凭空产生的,笔者遇到的实际问题是需要计算一个坐标沿中心旋转特定角度后的坐标
因此为了方便计算先将直角坐标(x,y)其转换为极坐标(ρ,θ)后转动角度后(ρ,θ+Δθ)再转化为直角坐标
但是其旋转方向与一般的极坐标系不同,其方向为顺时针。
这里我们采取一个比较巧妙的方法就是将y反向即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值