用Python写一个函数,该函数的功能是将给定坐标点进行旋转、平移或放缩变换。
时间: 2024-03-14 12:45:14 浏览: 70
好的,我可以为您提供一个基本的函数框架,您可以根据自己的需求进行修改和完善:
```python
import numpy as np
def transform_point(point, rotation=0, translation=(0,0), scaling=(1,1)):
"""
对给定坐标点进行旋转、平移或放缩变换
参数:
point: tuple, 表示坐标点的(x,y)坐标
rotation: int/float, 旋转角度(默认为0,即不旋转)
translation: tuple, 平移向量(默认为(0,0),即不平移)
scaling: tuple, 放缩因子(默认为(1,1),即不放缩)
返回值:
tuple, 表示变换后的坐标点的(x,y)坐标
"""
# 将角度转换为弧度
theta = np.radians(rotation)
# 构造旋转矩阵
rotation_matrix = np.array([[np.cos(theta), -np.sin(theta)],
[np.sin(theta), np.cos(theta)]])
# 构造平移向量
translation_vector = np.array(translation)
# 构造放缩矩阵
scaling_matrix = np.array([[scaling[0], 0],
[0, scaling[1]]])
# 将坐标点转换为列向量
point_vector = np.array(point).reshape(2,1)
# 进行变换
transformed_point = scaling_matrix.dot(rotation_matrix.dot(point_vector)) + translation_vector.reshape(2,1)
# 将变换后的列向量转换为坐标点
return tuple(transformed_point.reshape(1,2)[0])
```
这个函数可以接受一个坐标点 `(x,y)`,并根据传入的参数进行旋转、平移或放缩变换。其中,`rotation` 参数表示旋转的角度(默认为 0),`translation` 参数表示平移的向量(默认为 `(0,0)`),`scaling` 参数表示放缩的因子(默认为 `(1,1)`)。函数返回变换后的坐标点 `(x',y')`。
例如,假设我们要将坐标点 `(2,3)` 先向右平移 5 个单位,再顺时针旋转 45 度,最后在 x 轴方向上将其放缩为原来的 2 倍,可以这样调用函数:
```python
point = (2, 3)
translation = (5, 0)
rotation = 45
scaling = (2, 1)
transformed_point = transform_point(point, rotation, translation, scaling)
print(transformed_point) # 输出 (10.071067811865476, 5.0710678118654755)
```
注意,由于计算机中使用的是弧度制而非角度制,因此在函数中我们需要将角度转换成弧度。我们使用了 NumPy 库中的函数 `np.radians()` 来实现这一转换。另外,为了方便计算,我们将坐标点表示为列向量进行计算,最后再转换回行向量形式返回。
阅读全文