欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python极坐标和直角坐标的转换

程序员文章站 2022-04-03 22:48:35
...

1。直角坐标转极坐标

import cmath

cn = complex(3,4)

cmath.polar(cn)  #返回长度和弧度

 

2.极坐标转直角坐标

cn1 = cmath.rect(2, cmath.pi)

cn1.real,cn1.imag,  

 

补充:弧度转角度:

import math

math.degrees(x)弧度转换为角度。

 

角度转为弧度:

import math

math.radians(x)

 

 

极坐标和直角坐标互相转换的一个应用:

#计算A线段在B线段中所占的比例
def getPorAInB(LineAS,LineAE,LineBS,LineBE):
    #首先,选定LineB的一个点作为起点,大家都转为极坐标
    #然后,各点的角度都减去LineB的那个角度
    #然后,将极坐标转为x,y坐标
    LineAS = np.array(LineAS)
    LineAE = np.array(LineAE)
    LineBS = np.array(LineBS)
    LineBE = np.array(LineBE)

    (LineAS, LineAE,LineBS, LineBE) = (LineAS-LineBS, LineAE-LineBS,LineBS-LineBS, LineBE-LineBS)
    LineASPo = cartToPolar(LineAS[0],LineAS[1] ) #极坐标顺序是先r,后角度
    LineAEPo = cartToPolar(LineAE[0], LineAE[1])
    LineBEPo = cartToPolar(LineBE[0], LineBE[1])

    LineASPo=  (LineASPo[0],LineASPo[1]-LineBEPo[1])
    LineAEPo = (LineAEPo[0], LineAEPo[1] - LineBEPo[1])
    LineBEPo = (LineBEPo[0], 0)

    #在将他们转回直角坐标
    LineAS = polarToCart(LineASPo[0],LineASPo[1])
    LineAE = polarToCart(LineAEPo[0],LineAEPo[1])

    #value1,value2表示起点和终点落在了几分之几的位置
    value1 = LineAS[0]/LineBEPo[0]
    value2 = LineAE[0]/LineBEPo[0]

    #将value1,value2,0,1按从小到大的顺序排列,然后去中间的两个
    return np.sort([value1,value2,0,1])[1:3]