二维图形旋转是计算机图形学中非常常用的一种操作,其中关键步骤就是坐标点的计算。
顺时针旋转
顺时针旋转矩阵为
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
网友评论