principal_curvatures — 3D curvature op

• Data kinds: points → curvature

• Call: import fullseye as fs; fs.ledger.principal_curvatures(points, k=25, normals=None) (implementation को सीधे call करना हो तो import curvature3d; curvature3d.principal_curvatures(points, k=25, normals=None), registry से लेना हो तो ops3d.get("principal_curvatures"))

उपयोग

हर point की principal curvatures (k1>=k2)। → (k1 (N,), k2 (N,))।

normals (दिशा-युक्त reference normals, (N,3)) न देने पर convex तरफ़ का magnitude (खुली surface का concave/convex चिह्न अनिश्चित)। दिशा-युक्त normals देने पर global orientation से मेल बैठता है और सही चिह्न मिलता है (concave = ऋण, convex = धन)।

प्रक्रिया (हर point, Python loop):

• cKDTree से स्वयं सहित k+1 neighbours लिए जाते हैं (k को N-1 तक सीमित किया जाता है)। neighbours 5 points से कम हों तो k1 = k2 = 0 लौटता है (क्योंकि 5 coefficients वाली quadric surface नहीं बन सकती)।

• neighbour coordinates को query point को origin मानकर खिसकाया जाता है, और local.T @ local के सबसे छोटे eigenvector को normal माना जाता है (दिशा normals हो तो उससे मेल खाती है, न हो तो neighbours के centroid से दूर वाली तरफ़)।

• tangent basis (t1, t2) पर project करके w = d·u + e·v + a·u² + b·uv + c·v² का least squares fit → पहले/दूसरे fundamental form से shape operator के eigenvalues लेकर, convex को धन बनाकर k1 >= k2 क्रम में रखा जाता है।

• इकाई 1/लंबाई है (point cloud की इकाई पर निर्भर)। radius R के गोले के लिए k1 = k2 = 1/R, cylinder के लिए (1/R, 0), plane के लिए 0।

• k neighbour points की संख्या है (default 25)। जितना बड़ा उतना smooth और curvature कम, जितना छोटा उतना noise पकड़ता है।

• normals का (N,3), finite और non-zero rows वाला होना ज़रूरी है (ValueError)। deterministic।

• आगे के चरण: mean_curvature / gaussian_curvature / shape_index (सभी अंदर वही गणना दोहराते हैं)। shape index और curvedness की जोड़ी चाहिए तो 2 को (N,2) में साथ रखकर curvature_to_shape_index।

पृष्ठभूमि guides (इस op के पीछे की physics और conventions)

• blas_threads_and_memory — Matrix decompositions धीमे क्यों हैं — BLAS threads, caches, memory layout

संदर्भ (sample data, साहित्य)

• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।

• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• curvature_grasp — py -3.11 examples_3d/curvature_grasp.py

• itokawa_curvature — py -3.11 examples_3d/itokawa_curvature.py

• minimal_surfaces — py -3.11 examples_3d/minimal_surfaces.py

वे अगले ops जिनसे type जुड़ता है (curvature को input के रूप में लेते हैं)

fuse_to_voxel

इसी category के (curvature)

mean_curvature · gaussian_curvature · shape_index · estimate_normals


*Provenance: curvature3d.py — 3D operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

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