计算二维图形旋转后坐标

二维图形旋转是计算机图形学中非常常用的一种操作,其中关键步骤就是坐标点的计算。

顺时针旋转

顺时针旋转矩阵为


def CW_rotate(angle, x, y, cent_x, cent_y):
    '''
    顺时针旋转坐标计算
    INPUT --> 旋转角度, 原坐标x, 原坐标y, 中心点x, 中心点y
    '''
    angle = math.radians(angle) # 以弧度作为参数
    new_x = (x-cent_x)*math.cos(angle) + (y-cent_y)*math.sin(angle) + cent_x
    new_y = -(x-cent_x)*math.sin(angle) + (y-cent_y)*math.cos(angle) + cent_y
    return round(new_x, 2), round(new_y, 2)

def CW_rotate_N(angle, x, y, cent_x, cent_y):
    '''
    N个坐标点顺时针旋转坐标计算
    INPUT --> 旋转角度, 原坐标x, 原坐标y, 中心点x, 中心点y
    '''
    angle = math.radians(angle) # 以弧度作为参数
    x = np.array(x)
    y = np.array(y)
    new_x = (x-cent_x)*math.cos(angle) + (y-cent_y)*math.sin(angle) + cent_x
    new_y = -(x-cent_x)*math.sin(angle) + (y-cent_y)*math.cos(angle) + cent_y
    return new_x, new_y

逆时针旋转

逆时针旋转矩阵为


def CCW_rotate(angle, x, y, cent_x, cent_y):
    '''
    逆时针旋转坐标计算
    INPUT --> 旋转角度, 原坐标x, 原坐标y, 中心点x, 中心点y
    '''
    angle = math.radians(angle) # 以弧度作为参数
    new_x = (x-cent_x)*math.cos(angle) - (y-cent_y)*math.sin(angle) + cent_x
    new_y = (x-cent_x)*math.sin(angle) + (y-cent_y)*math.cos(angle) + cent_y
    return round(new_x, 2), round(new_y, 2)

def CCW_rotate_N(angle, x, y, cent_x, cent_y):
    '''
    N个坐标点逆时针旋转坐标计算
    INPUT --> 旋转角度, 原坐标x, 原坐标y, 中心点x, 中心点y
    '''
    angle = math.radians(angle) # 以弧度作为参数
    x = np.array(x)
    y = np.array(y)
    new_x = (x-cent_x)*math.cos(angle) - (y-cent_y)*math.sin(angle) + cent_x
    new_y = (x-cent_x)*math.sin(angle) + (y-cent_y)*math.cos(angle) + cent_y
    return new_x, new_y

你可能感兴趣的:(计算二维图形旋转后坐标)