3D görbe keresése a torziós és görbületből az NDSolve segítségével

Finding 3d Curve From Torsion



Megoldás:

Az NDSolve képes megoldani a vektor egyenleteket. A Frenet-Serret egyenletekhez, amelyekbent, b, n az érintő, a normál és a binormális illr '[s] == t [s], ami a görbe paraméterezését eredményezir [s] a kerettel együtt kell integrálni.Az NDSolve felismeri a rendszert vektor -egyenletrendszerként, ha a kezdeti értékek vektorok.

Tiszta [r, s, t, n, b, κ, τ, r0, t0, n0, b0]; eqns = {t '[s] == κ [s] n [s], n' [s] == -κ [s] t [s] + τ [s] b [s], b '[s] == -τ [s] n [s], r '[s] == t [s], t [0] == t0, n [0] == n0, b [0] == b0, r [ 0] == r0}; κ [s_]: = 10,08 Sin [Pi s]^2; τ [s_]: = 3 Cos [Pi s]; {t0, n0, b0} = Ortogonalizálás [{{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}]; r0 = {0, 0, 0}; sol = Először @ NDSolve [eqns, {r, t, n, b}, {s, 0, 12}]; A [{s1 = (r /. Sol) ['Domain'] [[1, 1]], s2 = (r /. Sol) ['Domain'] [[1, 2]]} segítségével manipulálja a [Show [ ParametricPlot3D [Értékelje [r [s] /. sol], {s, s1, s2}, PlotStyle -> {Thick, Brown}, PlotRangePadding -> 1], Graphics3D [[email protected] [{Thick, Red, Arrow [{{0, 0, 0}, t [s0]}], Zöld, Nyíl [{{0, 0, 0}, n [s0]}], Kék, Nyíl [{{0, 0, 0}, b [s0]}]} /. sol, r [s0] /. sol]]], {s0, s1, s2}]]

Manipulálja az animációt




Az egyenleteket mátrix formában is megadhatjuk ésAz NDSolve rendezi őket. ( Frissítés: Funkcióként csomagolva.)



ClearAll [fsIntegrate]; fsIntegrate [κ_, τ_, {r0_, frame0_}, {r_, t_, n_, b_}, {s_, s0_, s1_}]: = A [{fsmat = {κ, 0, -τ}  [TensorWedge] { 0, 1, 0} // Normál, ( * Frenet-Serret RHS *) frame = {t [s], n [s], b [s]}}, ( * TNB frame *) [{eqns = { D [frame, s] == fsmat.frame, r '[s] == t [s], ( * ODE *) frame == frame0 /. s -> 0, r [0] == r0}}, ( * ICs *) NDSolve [eqns, {r, t, n, b}, {s, s0, s1}]]]; fsIntegrate [10.08 Sin [Pi s]^2, 3 Cos [Pi s], (* görbület, torzió*) {{0, 0, 0}, (* kezdőpont*) IdentityMatrix [3]}, (* kezdeti keret *) {r, t, n, b}, ( *görbe, érintő, normál, binormális változók *) {s, 0, 12}] ( *integrációs intervallum *) 
[email protected] [{x '' [t] == ​​k1 [t] nx [t], nx '[t] == ​​-k1 [t] x' [t] - k2 [t] bx [t], bx '[t] == ​​k2 [t] nx [t], y' '[t] == ​​k1 [t] ny [t], ny' [t] == ​​-k1 [t] y '[t] - k2 [t] by [t], by '[t] == ​​k2 [t] ny [t], z' '[t] == ​​k1 [t] nz [t], nz' [t] == -k1 [t] z '[t] - k2 [t] bz [t], bz' [t] == ​​k2 [t] nz [t], x [ti] == iniPos [[1]], y [ti] == iniPos [[2]], z [ti] == iniPos [[3]], x '[ti] == iniDir [[1]], y' [ti] == iniDir [[2] ]], z '[ti] == iniDir [[3]], nx [ti] == iniNor [[1]], ny [ti] == iniNor [[2]], nz [ti] == iniNor [[3]], bx [ti] == iniBin [[1]], szerző: [ti] == iniBin [[2]], bz [ti] == iniBin [[3]]}, {x, y , z, nx, ny, nz, bx, by, bz}, {t, ti, te}]

k1 [t] görbület,k2 [t] torziós,{x [t], y [t], z [t]} az útvonal,{nx [t], ny [t], nz [t]} normális,{bx [t], [t], bz [t]} binormális, ívhossz pedig(te-ti) *norm [iniDir].



Ez aláírt görbület ...