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"))
हर 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 से सही दिशा मिलती है।
• denominator में केवल absolute 1e-12 जोड़ा जाता है, इसलिए जहाँ पूरी तरह normalise नहीं हो पाता वहाँ unit length नहीं बनती। सीधे हिस्सों (r'' ∥ T या 0) में N और B लगभग zero vector बन जाते हैं, और inflection point के आगे-पीछे N की दिशा उलट जाती है। "unit vector" की गारंटी वहाँ लागू नहीं होती।
• 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.