frenet_frame — 3D curve op

• 資料種類:points → frame

• 呼叫: import fullseye as fs; fs.ledger.frenet_frame(curve)(要直接呼叫實作,import curve3d; curve3d.frenet_frame(curve);從台帳取用則 ops3d.get("frenet_frame"))

用法

各點的 Frenet 標架(切線 T,主法線 N,副法線 B)。→ (T, N, B),各為 (Npts,3) 單位向量。

將有序點列 (N,3) 以 index 參數用 np.gradient(內部為中心差分,兩端為單側差分)求導得到 r', r'',

• T = r' / ‖r'‖

• N = (r'' − (r''·T) T) / ‖…‖(r'' 的 T 正交分量 = 指向曲率中心的方向)

• B = T × N

在各點計算上述量。r'' 的 T 正交分量的方向對重新參數化不變,因此只要點間距平滑變化,用 index 參數也能得到正確方向。

• 分母只加上絕對值 1e-12,無法完全正規化的位置不會成為單位長度。在直線區間(r'' ∥ T 或 0)中 N、B 幾乎為零向量,在反曲點前後 N 的方向會反轉。「單位向量」的保證在那裡不成立。

• N<2 的點列會由 np.gradient 拋出 ValueError。除此之外沒有形狀檢驗。

• 兩端 2 點為單側差分,精度下降。先進行等間距化(resample_uniform)或平滑(fit_spline_curve)會更穩定。

曲率、撓率的數值本身用 curvature_torsion,弧長用 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

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

fuse_to_voxel

同類別(curve)

curvature_torsion · 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.