curve op• Data kinds: points → frame
• Call: import fullseye as fs; fs.ledger.frenet_frame(curve) (implementation को सीधे call करना हो तो import curve3d; curve3d.frenet_frame(curve), registry से लेना हो तो ops3d.get("frenet_frame"))
• GPU: नहीं (केवल CPU reference implementation)
हर point पर Frenet frame (tangent T, principal normal N, binormal B)। → (T, N, B), हर एक (Npts,3) unit vectors।
क्रमित point sequence (N,3) को index parameter पर np.gradient (भीतर central difference, दोनों सिरों पर one-sided difference) से differentiate करके r', r'' निकाले जाते हैं, और
• T = r' / ‖r'‖
• N = (r'' − (r''·T) T) / ‖…‖ (r'' का T के लंबवत component = curvature केंद्र की ओर की दिशा)
• B = T × N
हर point पर गणना की जाती है। r'' के T-लंबवत component की दिशा reparameterisation से नहीं बदलती, इसलिए जब तक point spacing smoothly बदलती है, index parameter से सही दिशा मिलती है।
• normalisation में कोई निचली सीमा नहीं रखी जाती (2026-11-05, red-team N1 का sibling: पहले denominator में absolute 1e-12 जोड़ा जाता था, जिससे scale 1e-6 के curve पर N की लंबाई 0.998 और 1e-9 पर 0.33 हो जाती थी)। T केवल ‖r'‖ = 0 वाले points (एक ही point का दोहराव) पर zero vector है। N उन points पर zero vector है जहाँ r'' का T-लंबवत घटक ‖r'‖ के 1e-9 गुने से अधिक नहीं है (प्रति sample मोड़ 1e-9 rad से कम = सीधा हिस्सा), और B भी वहाँ 0 है। inflection point के आगे-पीछे N की दिशा उलट जाती है।
• N<2 वाले sequence पर np.gradient ValueError देता है। इसके अलावा कोई shape validation नहीं है।
• दोनों सिरों के 2 points one-sided difference से बनते हैं, इसलिए accuracy कम होती है। पहले समान spacing (resample_uniform) या smoothing (fit_spline_curve) लगाने से परिणाम स्थिर होता है।
curvature और torsion के मान स्वयं curvature_torsion से, arc length arc_length से।
• 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 के स्रोत।
• space_curve — py -3.11 examples_3d/space_curve.py
• torus_knot_curve — py -3.11 examples_3d/torus_knot_curve.py
frame को input के रूप में लेते हैं)curve)curvature_torsion · arc_length · resample_uniform · fit_spline_curve
*Provenance: curve3d.py — 3D operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.