import math from trans import linear_trans def rotate_point(p1:list[float],p2:list[float],dgr:float) -> list[float]: ''' Rotate p1 with p2 for dgr. dgr measured in radians. ''' arr = [ [math.cos(dgr),-math.sin(dgr)], [math.sin(dgr), math.cos(dgr)] ] vec = [p1[0]-p2[0],p1[1]-p2[1]] rvec = linear_trans(arr,vec) return [p2[0]+rvec[0], p2[1]+rvec[1]] def rotate_line(line,p,dgr): ''' Rotate y=kx+b with p for dgr. dgr measured in radians. @param line: tuple[k, b] => y = kx + b ''' k,b = line arr = [ [math.cos(dgr),-math.sin(dgr)], [math.sin(dgr), math.cos(dgr)] ] vec = [1, k] rvec = linear_trans(arr,vec) rk = rvec[1]/rvec[0] # (a,b) => (1,b/a) p1 = [0,b] rp1 = rotate_point(p1,p,dgr) return [rk,rp1[1]-rk*rp1[0]] if __name__ == "__main__": print(rotate_line((3,4),(2,1),math.pi/4))