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

如何用Julia和Makie创建带轻微圆角的实心立方体?

解决Makie生成带圆角无孔洞立方体的问题

问题描述

使用Julia的Makie库生成的立方体带有孔洞,希望消除孔洞,生成接近真实立方体形状、仅保留轻微圆角和圆角边的效果。原代码尝试修改指数值、直接传入range给volume!均无效。

原代码问题分析

原代码中计算立方体的公式x.^2 + y.^2 + z.^2本质是球体的距离函数,用等值面提取时自然会出现中心孔洞。要生成圆角立方体,需要使用符合立方体形状的有符号距离场(SDF)公式。

修改后的代码

using Makie, GLMakie

fig = Figure()
range = LinRange(-1.2, 1.2, 120)  # 扩大范围避免圆角被截断

# 圆角立方体的有符号距离场公式
rounded_cube = [
    let
        # 基础立方体范围:|x|,|y|,|z| ≤ 1
        d = max(abs(x)-1, abs(y)-1, abs(z)-1)
        # 圆角处理:r控制圆角半径,值越大圆角越明显
        r = 0.15
        max(d, 0) + min(max(d, 0), 0) - r + sqrt(max(d^2, r^2))
    end
    for x = range, y = range, z = range
]

ax = Axis3(fig[1,1], aspect = :data, azimuth = 1.17π, viewmode = :fit, title = "带圆角的立方体")
volume!(rounded_cube, algorithm = :iso, isovalue = 0.0, isorange = 0.02)
fig

代码说明

  1. 距离场公式:采用圆角立方体的标准SDF(有符号距离场),通过调整r值可以控制圆角的大小,数值越大圆角越突出。
  2. 范围调整:将LinRange从-1,1扩大到-1.2,1.2,避免圆角部分超出采样范围被截断。
  3. 等值面参数:将isovalue设为0,因为SDF中0值对应物体表面,这样能准确提取出带圆角的立方体表面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:20:31