import numpy as np def pnt2polar(p): # 平面点转极坐标 x, y = p length = np.sqrt(x * x + y * y) x = round(x, 6) y = round(y, 6) alpha = np.arctan(abs(y / x)) if x != 0. else 0. if x > 0: if y > 0: angle = alpha elif y == 0: angle = 0 else: angle = pi * 2 - alpha elif x == 0: if y > 0: angle = pi / 2 elif y == 0: angle = 0 else: angle = 3 * pi / 2 else: if y > 0: angle = pi - alpha elif y == 0: angle = pi else: angle = pi + alpha return round(length, 3), round(angle, 3) def polar2pnt(p): # 极坐标转平面坐标 length, angle = p eps = 1e-8 if length == 0: x, y = 0 else: if angle < eps: x = length y = 0 elif angle - 3 * pi / 2 > eps: x = length * np.cos(2 * pi - angle) y = -length * np.sin(2 * pi - angle) elif angle - 3 * pi / 2 == eps: x = 0 y = length elif angle - pi > eps: x = -length * np.cos(angle - pi) y = -length * np.sin(angle - pi) elif angle - pi == eps: x = -length y = 0 elif angle - pi / 2 > eps: x = -length * np.cos(pi - angle) y = length * np.sin(pi - angle) elif angle - pi / 2 == eps: x = 0 y = -length else: x = length * np.cos(angle) y = length * np.sin(angle) return round(x, 3), round(y, 3)