curve op• Datenarten: points → pairs
• Aufruf: import fullseye as fs; fs.ledger.curvature_torsion(curve) (die Implementierung direkt: import curve3d; curve3d.curvature_torsion(curve); aus dem Register: ops3d.get("curvature_torsion"))
• Rückgabewert über das Register: fullseye.ledger.curvature_torsion(...) liefert nur den Wert des deklarierten Out-Typs pairs (die zugrunde liegende Funktion gibt zusätzlich Hilfsinformationen zurück). Wird das Verworfene gebraucht, nutze fullseye.ledger.curvature_torsion.raw(...) oder rufe curve3d.curvature_torsion direkt auf.
• Rückgabe der Funktion: (kappa,tau) → (N,2) pairs
Krümmung κ und Torsion τ an jedem Punkt (eine reparametrisierungsinvariante geschlossene Form). → (kappa (N,), tau (N,)).
Bei einer gleichmäßigen Skalierung s der Koordinaten skalieren κ→κ/s und τ→τ/s korrekt. Das epsilon gegen Division durch 0 wird
relativiert: Ein absolutes 1e-12 dominiert cross_norm² (~s⁴) und r1_norm³ (~s³) bei kleinen Koordinatenskalen und zerstört κ/τ; daher wird ein relatives eps verwendet, das mit der repräsentativen Skala L=median‖r'‖ (linear in der Koordinatenskala s) auf die Dimension jedes Nenners normiert ist. Das ist exakt äquivalent dazu, die Kurve mit L zu normieren, zu rechnen und mit 1/L zurückzuskalieren.
Die Berechnung wendet auf die geordnete Punktfolge (N,3) mit dem Index als Parameter 3-mal np.gradient an (zentrale Differenzen, an beiden Enden einseitige Differenzen) und bestimmt aus r', r'', r'''
• κ = ‖r'×r''‖ / ‖r'‖³
• τ = (r'×r'')·r''' / ‖r'×r''‖²
die Werte. Die Einheit von κ und τ ist jeweils 1/Koordinateneinheit. Das Vorzeichen von τ ist positiv für die rechtshändige Helix (a cosθ, a sinθ, bθ), b>0. Auf geraden Abschnitten (‖r'×r''‖≈0) ist κ≈0, und τ ist unzuverlässig, da sein Nenner nur noch eps ist.
• ValueError: wenn alle Punkte zusammenfallen und median‖r'‖ 0 oder nicht endlich ist.
• Wo sich der Punktabstand abrupt ändert, werden die numerischen Ableitungen gestört; daher vorher mit resample_uniform äquidistant machen oder mit fit_spline_curve glätten und dann übergeben. Die 2 Punkte an jedem Ende verlieren durch einseitige Differenzen an Genauigkeit.
• Für N<2 löst np.gradient ValueError aus. Die Form (N,3) wird nicht validiert.
Wird das Begleitbein (T,N,B) benötigt, frenet_frame verwenden; die Bogenlänge ds aus arc_length entnehmen.
• Katalog der Beispieldaten (Download-URLs / Lizenzen) — 2-D nutzt skimage.data (BSD/Public Domain) plus synthetische Bilder, 3-D nennt Download-URLs echter Datenquellen (Stanford, PDS, …).
• Herkunft und Literatur der Operatoren — die Quellen der Forschung/Verfahren, auf denen diese Operatorfamilie beruht.
• space_curve — py -3.11 examples_3d/space_curve.py
• torus_knot_curve — py -3.11 examples_3d/torus_knot_curve.py
pairs als Eingabe)curve)frenet_frame · arc_length · resample_uniform · fit_spline_curve
*Provenance: curve3d.py — 3D Operator-Registry. Diese Notiz wird von tools/opdocs.py md erzeugt (nicht von Hand bearbeiten).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.