← 返回Book 2目录
第27章

三维空间几何变换

3D Geometric Transformations

立方体、球体在三维空间的平移、旋转、缩放、镜像、投影、剪切

🎲 3D立方体几何变换

单位立方体在三维空间中的各种仿射变换

变换矩阵

M = [

[ 1.00, 0.00, 0.00]

[ 0.00, 1.00, 0.00]

[ 0.00, 0.00, 1.00]

]

🔄 刚体变换

平移和旋转保持距离、角度不变

📐 缩放

改变大小,保持形状(等比)或改变形状(非等比)

🪞 镜像

关于坐标平面翻转,改变手性

📊 投影

降维到平面或直线,信息压缩

四视图:工程制图标准观察法

3D透视 + xy俯视 + xz侧视 + yz正视

3D透视 (elev=35°, azim=35°)
xy俯视 (elev=90°)
xz侧视 (elev=0°, azim=-90°)
yz正视 (elev=0°, azim=0°)

💡 旋转顺序的重要性

矩阵不可交换:Rx · Ry ≠ Ry · Rx

• Data @ RxT @ RyT 表示先绕x旋转,再绕y旋转
• 改变旋转顺序,最终姿态完全不同
• 欧拉角定理:任意3D旋转可分解为三次轴旋转

Python代码:
fig, axes = plt.subplots(2, 2, figsize=(10, 10), 
                         subplot_kw={'projection': '3d'})

# 四个视角
views = [(35, 35), (90, -90), (0, -90), (0, 0)]
for ax, (elev, azim) in zip(axes.flat, views):
    ax.scatter(X, Y, Z, c=colors)
    ax.view_init(elev=elev, azim=azim)
    ax.set_proj_type('ortho')

单位球体变换:完美对称性的几何展示

等比缩放保持球形,非等比变为椭球,投影变为椭圆

🎯 椭球方程

(x/a)² + (y/b)² + (z/c)² = 1
a, b, c是三个半轴长度

📊 应用

• 多元高斯分布的等密度面
• PCA降维的几何理解
• 协方差矩阵可视化

Python代码:
# 生成单位球
theta = np.linspace(0, np.pi, 101)
phi = np.linspace(0, 2*np.pi, 101)
Theta, Phi = np.meshgrid(theta, phi)

x = np.sin(Theta) * np.cos(Phi)
y = np.sin(Theta) * np.sin(Phi)
z = np.cos(Theta)

# 应用变换矩阵
points = np.vstack([x.flatten(), y.flatten(), z.flatten()])
transformed = M @ points

ax.plot_surface(X, Y, Z, cmap='RdYlBu')