from math import cos, sin, pi, sqrt class Point: def __init__(self, x, y): self.x, self.y = x, y def __str__(self): return '(%g, %g)'% (self.x, self.y) class PolarPoint(Point): def __init__(self,r,theta): self.r = r self.theta = theta Point.__init__(self,r*cos(theta),r*sin(theta)) def __str__(self): return '(x,y)= (%g,%g), (r,theta) = (%g,%g)' %(self.x,self.y,self.r,self.theta) #example use case """ origo = PolarPoint(0,pi) p1 = PolarPoint(1,pi/2) print(origo) print(p1) """ def test_PolarPoint(): """ r,theta = (1,pi/2) -> x,y = (0,1) r,theta = (2,pi/4) -> x,y = (sqrt(2),sqrt(2)) """ tol = 1e-14 points_polar = [(1,pi/2),(2,pi/4)] points_cart = [(0,1),(sqrt(2),sqrt(2))] for p,x in zip(points_polar,points_cart): pp = PolarPoint(p[0],p[1]) max_error = max(abs(pp.r-p[0]),abs(pp.theta-p[1]),abs(pp.x-x[0]),abs(pp.y-x[1])) msg = 'Something wrong with point %s' %str(pp) assert max_error < tol, msg if __name__ == '__main__': test_PolarPoint()