min_enclosing_sphere — 3D 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(구 검출)와는달리, 모든 점을 내포하는 최소의 구(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+ε) 근사.

Parameters

points : array_like (N,3)

입력 점군(>= 1 점).

refine_iters : int

Bădoiu–Clarkson 정밀화의 반복 횟수(기본값 1000). 0 이면 Ritter 만.

Returns

dict

• center: (3,) float64 — 구 중심(월드 좌표).

• radius: float — 반지름(모든 점을 내포).

Raises

ValueError

형상 부정, 비유한, 점 수 0, 또는 refine_iters 가 음수일 때(fail-closed).

배경 지식 가이드(이 연산자 앞에 있는 물리·규약)

• blender_interop — Blender와 함께 쓰기 — 형상을 만들고 fullseye로 측정(축·단위·정답 데이터의 함정)

참고(샘플 데이터·문헌)

• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL 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 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.