1. 二维几何变换基础概念
在计算机图形学和图像处理领域,二维几何变换是最基础也是最重要的操作之一。简单来说,它就是对二维平面上的点、线、面等几何元素进行位置、形状的改变。最常见的三种基本变换是平移(Translation)、旋转(Rotation)和缩放(Scaling)。
为什么我们需要这些变换?想象一下你在设计一个简单的2D游戏:角色需要移动(平移),敌人需要转向玩家(旋转),场景需要放大缩小(缩放)。这些操作本质上都是对物体坐标进行数学运算的结果。
注意:所有二维变换都可以用矩阵乘法来表示,这是计算机图形学中一个非常重要的特性。使用矩阵表示不仅形式统一,还能方便地进行变换的组合。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 平移变换实现
2.1 平移的数学原理
平移是最直观的变换,它让物体在平面上沿着某个方向移动固定距离。数学上,给定一个点P(x,y),平移后的新坐标P'(x',y')可以表示为:
x' = x + t_x
y' = y + t_y
其中t_x和t_y分别是x轴和y轴方向的平移量。
在实际编程中,我们通常用齐次坐标来表示平移变换矩阵:
code复制[1 0 t_x]
[0 1 t_y]
[0 0 1 ]
2.2 代码实现示例
python复制import numpy as np
def translate(points, tx, ty):
"""二维平移变换
:param points: 点集,形状为(n,2)的numpy数组
:param tx: x方向平移量
:param ty: y方向平移量
:return: 变换后的点集
"""
# 构造变换矩阵
translation_matrix = np.array([
[1, 0, tx],
[0, 1, ty],
[0, 0, 1]
])
# 转换为齐次坐标
homogeneous_points = np.column_stack((points, np.ones(len(points))))
# 应用变换
transformed = np.dot(homogeneous_points, translation_matrix.T)
return transformed[:, :2]
实操心得:使用齐次坐标虽然增加了计算维度,但可以统一所有变换的矩阵表示形式,这在实现变换组合时特别有用。在实际项目中,我通常会创建一个Transform类来管理各种变换。
3. 旋转变换实现
3.1 旋转的数学原理
旋转是让物体绕某个点(通常是原点)转动一定角度。逆时针旋转θ角度后的新坐标为:
x' = xcosθ - ysinθ
y' = xsinθ + ycosθ
对应的齐次坐标变换矩阵为:
code复制[cosθ -sinθ 0]
[sinθ cosθ 0]
[ 0 0 1]
3.2 绕任意点旋转的实现
实际应用中,我们经常需要绕物体中心或其他特定点旋转。这需要三个步骤:
- 将旋转中心平移到原点
- 执行旋转
- 平移回原位置
python复制def rotate(points, angle, center=None):
"""二维旋转变
