You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在OpenSCAD中创建精准匹配数据比例的3D饼图

OpenSCAD 自定义3D饼图实现方案

你之前用$fn=3的三角截面圆柱拼接的方案,本质是用固定120度的三角块硬凑,只能拼出固定占比的分块,根本无法适配任意数据比例,直接自定义扇形切片模块是最灵活的实现方式,不需要依赖低精度圆柱拼接。

核心实现逻辑

  • 先将所有数据值换算为占总数值的比例,再映射为0~360度对应的圆心角
  • 封装通用饼图切片模块,支持自定义切片角度、半径、厚度,直接生成标准扇形柱体
  • 按顺序累加角度放置每个切片,给不同切片绑定对应颜色即可

可直接运行的完整代码

// 全局参数配置
$fn = 24; // 圆弧渲染精度
pie_r = 10; // 饼图半径
pie_h = 2; // 饼图厚度

// 单个饼图切片模块
module pie_slice(angle, radius=pie_r, height=pie_h) {
    angle_step = 1; // 圆弧采样步长,值越小边缘越平滑
    shape_points = [[0, 0]];
    for(a = [0:angle_step:angle]) {
        shape_points = concat(
            shape_points,
            [ [radius * cos(a), radius * sin(a)] ]
        );
    }
    linear_extrude(height=height)
    polygon(shape_points);
}

// 填入你的数据集,格式为[数值, 颜色]
dataset = [
    [30, "red"],
    [25, "blue"],
    [20, "green"],
    [25, "purple"]
];

// 自动计算占比生成饼图
total_val = sum([for(item=dataset) item[0]]);
current_rotate = 0;
for(d = dataset) {
    slice_val = d[0];
    slice_color = d[1];
    slice_angle = slice_val / total_val * 360;
    color(slice_color)
    rotate([0, 0, current_rotate])
    pie_slice(angle=slice_angle);
    current_rotate += slice_angle;
}

方案优势

  • 适配任意占比的数据集,不需要手动计算坐标、旋转角度硬凑位置,修改dataset里的数值即可自动生成对应比例的饼图
  • 渲染精度可控,不会出现低分辨率圆柱的明显棱角
  • 扩展方便:如果需要做突出显示的分离式饼图,只要在对应切片的rotate之后,沿切片中线方向加对应偏移量的translate即可;如果需要加标注、抬升切片效果也可以直接在模块基础上修改。

另外注意你原有代码第一行的语法错误:fn=$24是错误写法,全局精度声明应该是$fn=24,美元符号要写在fn前面。

内容的提问来源于stack exchange,提问作者Ben Freeman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 03:18:14