三维仿射变换(3D Affine Transformation)是三维空间中通过线性变换(旋转、缩放、剪切)和平移组合实现的几何变换,有以下特性:
1、直线性:直线变换后仍为直线;
2、平行性:平行平面变换后仍平行;
3、共线比例不变性:线段上点的相对比例保持不变。

数学表示:齐次坐标与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]
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐