美文网首页
计算二维图形旋转后坐标

计算二维图形旋转后坐标

作者: Byte猫 | 来源:发表于2019-04-17 17:30 被阅读0次

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

    顺时针旋转

    顺时针旋转矩阵为


    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
    

    相关文章

      网友评论

          本文标题:计算二维图形旋转后坐标

          本文链接:https://www.haomeiwen.com/subject/hzwnwqtx.html