bounds op• 資料種類:points → primitive
• 呼叫: import fullseye as fs; fs.ledger.min_enclosing_sphere(points, refine_iters: 'int' = 1000) -> 'Dict[str, object]'(要直接呼叫實作,import hull3d; hull3d.min_enclosing_sphere(points, refine_iters: 'int' = 1000) -> 'Dict[str, object]';從台帳取用則 ops3d.get("min_enclosing_sphere"))
點群 (N,3) → 包含全部點的(近似)最小包圍球 {center(3), radius}。
與 fit_sphere_3d(球面擬合)或 ransac_sphere / hough_sphere_3d(球偵測)不同,本 op 求解包含全部點的最小球(minimum enclosing ball, MEB)。採用 2 段結構,在嚴格保證「包含全部點」的同時收緊半徑:
1. Ritter (1990) 初始化 —— 粗略取最遠點對作為初始球,掃描各點,若有點在球外,則 1 次性膨脹為「同時包含該點與現有球」的最小球(膨脹式 new_r=(r+d)/2 / 中心往該點方向前進 (d-r)/(2d))。新球完全包含舊球,因此 1 遍即保證包含全部點。
2. 基於 Bădoiu–Clarkson (2003) core-set 疊代的精化 —— 第 i 次疊代時把中心往最遠點 q 靠近 1/(i+2)。單調收斂到真正的最小包圍球(收緊半徑過大的 Ritter 的漂移)。最後以「到中心的最大距離」確定半徑,因此精化後也 必定包含全部點(不會因近似導致半徑過小而漏點,偏於安全)。
僅當精化後的中心比 Ritter 能縮小外接半徑時才採用(始終不大於 Ritter)。不是真正的最小球(嚴格解為 Welzl 的隨機線性時間法),而是快速的 (1+ε) 近似。
points : array_like (N,3)
輸入點雲(>= 1 個點)。
refine_iters : int
Bădoiu–Clarkson 精化的疊代次數(預設 1000)。0 表示只用 Ritter。
dict
• center:(3,) float64 —— 球心(世界座標)。
• radius:float —— 半徑(包含全部點)。
ValueError
形狀不正確、非有限、點數為 0,或 refine_iters 為負時(fail-closed)。
• blender_interop — 與 Blender 搭配使用 —— 在 Blender 中建形、用 fullseye 量測(座標軸、單位、真值資料的陷阱)
• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 URL。
• 運算子來歷與參考文獻 —— 該運算子族所依據的研究/方法出處。
• hull_bounds — py -3.11 examples_3d/hull_bounds.py
primitive 作為輸入)fuse_to_voxel · angle_between_lines · angle_between_planes · angle_line_plane · distance_point_plane · distance_point_line · distance_line_line · distance_segment_segment
bounds)convex_hull · aabb · obb
*Provenance: hull3d.py — 3D 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.