三维仿射变换-简略版
三维仿射变换(3D Affine Transformation)是三维空间中通过线性变换(旋转、缩放、剪切)和平移组合实现的几何变换,有以下特性:
1、直线性:直线变换后仍为直线;
2、平行性:平行平面变换后仍平行;
3、共线比例不变性:线段上点的相对比例保持不变。
数学表示与变换类型
- 数学表示:齐次坐标与4×4矩阵
- 平移(Translation)
- 缩放(Scaling)
- 旋转(Rotation)
- 剪切(Shear)
- 代码实现
数学表示:齐次坐标与4×4矩阵
三维仿射变换通常使用齐次坐标和4×4矩阵表示,以便统一处理平移和线性变换:
线性变换部分:左上3×3子矩阵,控制旋转、缩放、剪切:
平移向量:右侧列向量 控制位移。
平移(Translation)
仅改变位置,形状和方向不变(角标x、y,z 表示3个维度的方向):
缩放(Scaling)
沿坐标轴按比例放大或缩小:
- 均匀缩放:S x =Sy =Sz ;
- 非均匀缩放:比例不同导致形变。
旋转(Rotation)
绕坐标轴旋转角度θ,常用旋转矩阵:
- 绕X轴:
- 绕Y轴
- 绕Z轴
剪切(Shear)
沿某一方向倾斜变形:
X方向剪切(影响Y和Z):
Y方向剪切(影响X和Z):
代码实现
NumPy:使用4×4矩阵进行变换计算。
import numpy as np
# 定义点(齐次坐标)
point = np.array([1, 2, 3, 1])
# 绕Y轴旋转90度 + 平移(5,0,0)
M = np.array([
[0, 0, 1, 5],
[0, 1, 0, 0],
[-1, 0, 0, 0],
[0, 0, 0, 1]
])
# 应用变换
transformed_point = M @ point
print(transformed_point[:3]) # 输出 [8, 2, -1]