← 返回Book 2目录
第18章

三维几何体

3D Geometric Objects · 从网格曲面到体积可视化

掌握参数方程、等高线、三角网格、voxels等多种三维几何体绘制方法

🌐 参数曲面可视化器

参数方程通过引入参数u和v来描述三维曲面,比直角坐标更灵活,适合描述复杂几何体。

中分辨率

参数方程

x = r·sin(u)·cos(v), y = r·sin(u)·sin(v), z = r·cos(u)
球体是三维空间中到一个固定点距离相等的所有点的集合
参数范围: u ∈ [0, 2π], v ∈ [0, 2π], r = 2

🎯 球坐标系统

球坐标(r, θ, φ)特别适合描述球对称的几何体。 r是径向距离,θ是极角,φ是方位角。

♾️ 拓扑学奇观

莫比乌斯带只有一个面,如果沿着中线剪开, 会得到一个更大的单面环,而不是两个分离的环。

💡 探索建议: 切换不同曲面类型,观察参数方程如何生成复杂几何体。 开启线框可以看到网格结构。调整分辨率平衡视觉效果和性能。 旋转视角观察三维结构的不同侧面。

18.1 三角网格:离散化曲面表示

用三角形逼近复杂曲面,广泛应用于3D建模

顶点数
289
三角形数
512
边数
768
Python代码:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

# 生成球体网格
fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(111, projection='3d')

# 球体参数方程
u = np.linspace(0, np.pi, 16)
v = np.linspace(0, 2*np.pi, 16)
U, V = np.meshgrid(u, v)

x = np.sin(U) * np.cos(V)
y = np.sin(U) * np.sin(V)
z = np.cos(U)

ax.plot_trisurf(x.flatten(), y.flatten(), z.flatten(), 
                cmap='viridis', alpha=0.9, edgecolor='teal')

ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()
💡 三角网格的优势:
• 万能表示:任何曲面都可以用三角形逼近
• 高效渲染:GPU优化的基本图元
• 易于计算:法向量、光照计算简单
• 广泛应用:3D建模、游戏、CAD、医学影像
• 调整细分程度,观察精度与性能的权衡

📦 Voxel体素可视化器

Voxel(体素)是三维空间的"像素",用小方块表示三维数据。 适合离散数据、医学影像、分子模型等可视化。

中分辨率 (512 个体素)

模式说明

实心立方体由所有体素填充,颜色根据到中心的距离变化
应用场景:基础三维数据结构演示

🏥 医学影像

CT、MRI扫描产生的三维数据可用voxel表示, 每个体素对应组织密度或信号强度。

🎮 游戏设计

《我的世界》等体素游戏使用离散方块构建世界, 简化物理计算和渲染。

🎨 色彩理论

RGB色彩空间可视化帮助理解颜色的三维本质, 每个坐标对应一个颜色分量。

💡 探索建议: RGB模式特别有趣 - 立方体的每个角对应一个基本颜色(黑、红、绿、蓝、青、品红、黄、白)。 调整透明度可以看穿外层体素,观察内部结构。网格大小影响细节和性能。

🔄 旋转椭球变换可视化器

椭球是多元正态分布协方差矩阵的几何表示。通过旋转变换,观察椭球在不同平面的投影。 这在统计学中用于可视化马氏距离和数据分布的主方向。

椭球参数

• 半轴长度: a=2.5, b=1.5, c=1
• 欧拉角: (Rx=0°, Ry=0°, Rz=30°)
• 表示3×3协方差矩阵

📊 协方差矩阵

椭球的形状和方向由协方差矩阵决定。 半轴长度对应特征值,方向对应特征向量。

📏 马氏距离

椭球表面的点到中心的马氏距离相等, 常用于异常检测和数据分析。

🎯 主成分分析

椭球的主轴对应数据的主成分方向, 揭示数据的内在结构和相关性。

💡 探索建议: 调整旋转角度观察椭球姿态变化。投影显示椭球在三个坐标平面上的"影子", 帮助理解三维形状的二维表示。红/绿/蓝轴分别代表X/Y/Z方向。 这个可视化对应《矩阵力量》中的协方差矩阵几何解释。