curvature_torsion — 3D curve op

• 資料種類:points → pairs

• 呼叫: import 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 為參數做 3 次 np.gradient(中心差分,兩端為單側差分)得到 r', r'', r''',由

• κ = ‖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 點因單側差分而精度下降。

• N<2 時 np.gradient 拋出 ValueError。不驗證形狀 (N,3)。

若需要標架(T,N,B)請用 frenet_frame,弧長 ds 從 arc_length 取得。

參考(範例資料、文獻)

• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 URL。

• 運算子來歷與參考文獻 —— 該運算子族所依據的研究/方法出處。

可執行的範例(實際呼叫該運算子並已驗證的樣例)

• space_curve — py -3.11 examples_3d/space_curve.py

• torus_knot_curve — py -3.11 examples_3d/torus_knot_curve.py

型別可銜接的下一個運算子(可接受 pairs 作為輸入)

fuse_to_voxel

同類別(curve)

frenet_frame · arc_length · resample_uniform · fit_spline_curve


*Provenance: curve3d.py — 3D 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.