3. 参数化球体建模与质量属性批量提取

参数化球体建模与质量属性批量提取 学习卡片

任务说明

本案例将构建一个参数化球体建模脚本,以半径为输入参数批量生成球体模型,并自动提取每个球体的体积、质量与质心位置,最终将结果汇总输出到CSV文件。实现采用Python与OpenCASCADE几何内核,通过cadquery库完成建模与质量属性计算。

实现方案

核心思路:定义sphere_batch函数,接收半径列表与材料密度,循环执行以下操作——用cadquery.Workplane.sphere()创建球体实体,调用val().Volume()和val().Center()获取体积与质心,质量由体积乘密度得到。所有结果存入列表后,使用csv模块写入文件。为保证可复现性,代码中直接给出半径样例[10, 20, 30]与密度7.85 g/cm³(钢材典型值)。

代码实现

import cadquery as cq
import csv

def sphere_batch(radii_mm, density_g_per_cm3, output_file):
    """
    参数化批量生成球体并提取质量属性
    :param radii_mm: 半径列表,单位mm
    :param density_g_per_cm3: 材料密度,单位g/cm³
    :param output_file: 输出CSV路径
    """
    results = []
    for r in radii_mm:
        # 创建球体(半径单位mm)
        sphere = cq.Workplane("XY").sphere(r)
        solid = sphere.val()

        # 提取体积(mm³)
        volume_mm3 = solid.Volume()

        # 提取质心坐标(mm)
        center = solid.Center()
        cx, cy, cz = center.x, center.y, center.z

        # 计算质量:体积(mm³) × 密度(g/cm³) / 1000 = g
        mass_g = volume_mm3 * density_g_per_cm3 / 1000.0

        results.append({
            "radius_mm": r,
            "volume_mm3": volume_mm3,
            "mass_g": mass_g,
            "centroid_x_mm": cx,
            "centroid_y_mm": cy,
            "centroid_z_mm": cz
        })

    # 写入CSV
    with open(output_file, "w", newline="") as f:
        writer = csv.DictWriter(f, fieldnames=results[0].keys())
        writer.writeheader()
        writer.writerows(results)

    return results

# 样例执行:半径10/20/30mm,密度7.85g/cm³
if __name__ == "__main__":
    radii = [10, 20, 30]
    density = 7.85
    out_path = "sphere_properties.csv"
    data = sphere_batch(radii, density, out_path)
    print(f"已生成 {out_path},共 {len(data)} 条记录")

落地与运行

依赖安装:

pip install cadquery

执行方式:将上述代码保存为sphere_batch.py,在命令行运行:

python sphere_batch.py

运行结束后,当前目录下生成sphere_properties.csv文件。

验证方法

打开CSV文件,检查三行数据是否满足以下判定标准:

  • 体积公式校验:球体体积理论值 \( V = \frac{4}{3}\pi r^3 \)。例如半径10mm时,理论体积约4188.79 mm³,CSV中数值应一致(允许浮点误差)。
  • 质心位置:球体质心应位于原点(0,0,0),三行数据的质心坐标均应接近0。
  • 质量计算:质量 = 体积(mm³) × 密度(g/cm³) / 1000。半径10mm时,质量约32.89g,可手动复核。

若CSV中数值与理论计算一致,则案例验证通过。

参数化球体批量建模与属性提取流程 输入参数 半径列表 [10,20,30] 循环建模 Workplane.sphere(r) 提取体积/质心 质量计算 m = V × ρ / 1000 密度 7.85 g/cm³ 循环处理所有半径 CSV输出 sphere_properties.csv 验证标准 体积≈4/3πr³ | 质心≈(0,0,0) | 质量=V×ρ/1000 对照检查