curvature oppoints → descriptorimport fullseye as fs; fs.ledger.shape_index(points, k=25, normals=None) (実装を直接呼ぶなら import curvature3d; curvature3d.shape_index(points, k=25, normals=None)、台帳から引くなら ops3d.get("shape_index"))Koenderink の shape index s∈[-1,1] (凸球+1・円柱+0.5・鞍点0・凹球-1)。→ (N,)。
umbilic/平面判定は曲率スケール相対(絶対しきい値なし)。緩やかな凸/凹(曲率が微小でも)は 符号=凹凸を保ち、平面はデータ全体の曲率スケールに対して相対的に 0 の点のみ s=0 とする。
normals(向き付き参照法線, (N,3))未指定時は開面の凹/凸符号が不定(凸マグニチュードで報告)。 向き付き法線を渡すと大域向きに整合し正しい符号(凹球=cup → -1)を出す。
計算(各点、principal_curvatures と同じフィット):
sqrt((k1² + k2²) / 2) が、全点の curvedness の中央値 × 1e-3 未満なら s = 0。中央値が 0(曲率信号なし)なら全点 0。|k1 - k2| < 1e-2 × (|k1| + |k2|) なら s = sign(k1 + k2)(厳密に ±1)。それ以外: s = (2/π) · arctan((k1 + k2) / (k1 - k2))。
k は N-1 に切り詰め。normals は (N,3) で有限かつ非ゼロ行(ValueError)。未指定では開いた面の符号は不定(凸側)。principal_curvatures の 2 本を (N,2) に並べて curvature_to_shape_index に通す。py -3.11 examples_3d/curvature_grasp.pypy -3.11 examples_3d/itokawa_curvature.pydescriptor を入力に取れる)fuse_to_voxel · shape_distance
curvature)principal_curvatures · mean_curvature · gaussian_curvature · estimate_normals
Provenance: curvature3d.py — 3D operator registry. この per-op ノートは tools/opdocs.py md が自動生成(手編集しない)。
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.