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।
• blas_threads_and_memory — Matrix decompositions धीमे क्यों हैं — BLAS threads, caches, memory layout
• 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 के स्रोत।
• 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
curvature को input के रूप में लेते हैं)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.