sdf_csg op• 数据种类:sdf × sdf → sdf
• 调用: import fullseye as fs; fs.ledger.sdf_subtract(a, b)(要直接调用实现,import sdf_ops; sdf_ops.sdf_subtract(a, b);从台账取用则 ops3d.get("sdf_subtract"))
差集 A\B = max(a, -b)(在 A 内侧 且 在 B 外侧 = 在 -b 内侧)。
b 的符号取反会把“B 的外部变为内部、B 的内部变为外部”(补集),因此与 A 的积就是从 A 中挖去 B 的形状。不可交换:sdf_subtract(a,b) != sdf_subtract(b,a)。
计算:np.maximum(np.asarray(a, float64), -np.asarray(b, float64))。与 sdf_intersect(a, -b) 相同。shape 需要广播匹配(不匹配时由 numpy 抛出 ValueError),此外不做检查。NaN 传播,±inf 也严格传播(b = +inf 的点有 -b = -inf,因此 a 原样保留 = “B 无限远”的点仍为 A)。
输入:同一网格上的 2 个 SDF(内侧负、外侧正)。a 是保留的形状,b 是挖去的形状。距离单位与输入相同。
返回值:广播后 shape 的 float64。<= 0 为 A\B 的占用。
注意:
• 在 B 的内侧值为 -b > 0(到 B 表面的距离),因此到挖出孔内壁的距离在外侧是严格的,在 A 的内侧是下界(CSG 的标准性质)。
• B 完全包含 A 时所有元素为正(空集)。不会报错。
• 用于钻孔、型腔加工、壳体(由 a 与 sdf_offset(a, -t) 之差得到厚度 t 的壳)。
• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。
• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。
• sdf_csg — py -3.11 examples_3d/sdf_csg.py
sdf 作为输入)sdf_to_occupancy · fuse_to_voxel · integrate · extract_surface_points · query_distance · sdf_union · sdf_intersect · sdf_smooth_union
sdf_csg)grid_coords · sphere_sdf · box_sdf · plane_sdf · cylinder_sdf · torus_sdf · capsule_sdf · sdf_union
*Provenance: sdf_ops.py — 3D 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.