python 给定中心点坐标x、2r+1阶方阵,顺时针或逆时针三个参数,实现在某个方阵中进行局部方针旋转的函数
时间: 2023-11-27 12:51:16 浏览: 103
以下是一个实现方案:
```python
def rotate_matrix(matrix, x, r, direction):
"""
将给定矩阵 matrix 中以 (x, x) 为中心、边长为 2r+1 的正方形顺时针或逆时针旋转90度
:param matrix: 给定矩阵,为一个二维列表
:param x: 中心点的横纵坐标,为一个整数
:param r: 正方形的半边长,为一个整数
:param direction: 旋转方向,"cw" 表示顺时针,"ccw" 表示逆时针
:return: 旋转后的矩阵
"""
# 先确定需要旋转的矩阵的左上角和右下角坐标
left_top = (x-r, x-r)
right_bottom = (x+r, x+r)
# 根据旋转方向确定旋转操作
if direction == "cw":
rotate_func = lambda i, j: (x-(j-left_top[1]), i-left_top[0]+x)
elif direction == "ccw":
rotate_func = lambda i, j: (j-right_bottom[1]+x, x-(i-left_top[0]))
else:
raise ValueError("Invalid direction parameter!")
# 对需要旋转的矩阵进行旋转
rotated_matrix = [[0] * (2*r+1) for _ in range(2*r+1)]
for i in range(left_top[0], right_bottom[0]+1):
for j in range(left_top[1], right_bottom[1]+1):
new_i, new_j = rotate_func(i, j)
rotated_matrix[new_i-left_top[0]][new_j-left_top[1]] = matrix[i][j]
# 将旋转后的矩阵复制回原矩阵中
for i in range(left_top[0], right_bottom[0]+1):
for j in range(left_top[1], right_bottom[1]+1):
matrix[i][j] = rotated_matrix[i-left_top[0]][j-left_top[1]]
return matrix
```
调用该函数的示例代码:
```python
matrix = [[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[21, 22, 23, 24, 25]]
rotate_matrix(matrix, 2, 1, "cw")
```
输出结果:
```
[[1, 2, 6, 3, 4],
[21, 7, 8, 12, 5],
[16, 22, 13, 9, 10],
[17, 18, 14, 19, 15],
[20, 23, 24, 25, 11]]
```
上述代码中,给定的矩阵为一个 $5 \times 5$ 的方阵,中心点坐标为 $(2,2)$,需要旋转的正方形的半边长为 $1$,顺时针旋转。输出结果即为旋转后的矩阵。
阅读全文