curve oppoints → pairsimport fullseye as fs; fs.ledger.curvature_torsion(curve) (実装を直接呼ぶなら import curve3d; curve3d.curvature_torsion(curve)、台帳から引くなら ops3d.get("curvature_torsion"))fullseye.ledger.curvature_torsion(...) は宣言 out 型 pairs の値だけを返す(本体は補助情報も返す)。捨てられた側が要るときは fullseye.ledger.curvature_torsion.raw(...)、または curve3d.curvature_torsion を直接呼ぶ。
(kappa,tau) → (N,2) pairs各点の曲率 κ と捩率 τ(再パラメータ化不変な閉形式)。→ (kappa (N,), tau (N,))。
座標の一様スケール s に対し κ→κ/s, τ→τ/s と正しくスケールする。0 割り防止の epsilon は 相対化する: 絶対 1e-12 は cross_norm²(~s⁴)・r1_norm³(~s³)を小座標スケールで支配し、 κ/τ を破壊するため、代表スケール L=median‖r’‖(座標スケール s に線形)で各分母と同次元に 正規化した相対 eps を使う。これは曲線を L で正規化してから計算し 1/L で戻すのと厳密に等価。
計算は順序付き点列 (N,3) を index パラメータで np.gradient 3 回(中心差分、両端は
片側差分)した r’, r’’, r’’’ から
τ = (r’×r’’)·r’’’ / ‖r’×r’‘‖² で求める。単位は κ・τ とも 1/座標単位。τ の符号は右手系の螺旋 (a cosθ, a sinθ, bθ), b>0 で正。直線区間(‖r’×r’‘‖≈0)では κ≈0、τ は分母が eps だけに なるため値は信頼できない。
ValueError: 全点が重なり median‖r’‖ が 0 または非有限のとき。resample_uniform で等間隔化
するか fit_spline_curve で平滑化してから渡す。両端 2 点は片側差分で精度が落ちる。np.gradient が ValueError。形状 (N,3) の検証はしていない。標構(T,N,B)が要るなら frenet_frame、弧長 ds は arc_length から取る。
py -3.11 examples_3d/space_curve.pypy -3.11 examples_3d/torus_knot_curve.pypairs を入力に取れる)curve)frenet_frame · arc_length · resample_uniform · fit_spline_curve
Provenance: curve3d.py — 3D operator registry. この per-op ノートは tools/opdocs.py md が自動生成(手編集しない)。
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.