Určete křivost a torzi křivky
.
V knihovně VectorCalculus se nachází procedura Torsion pro výpočet torze, ale je definována jakožto kladná hodnota, což je pro naše účely nevýhodné. Ukážeme si, že si lze vytvořit vlastní proceduru přesně dle naší definice. V rámci jednotnosti vytvoříme i proceduru pro výpočet křivosti prostorové křivky kappa. Procedury pro výpočet křivosti kappa a torze tau vytvoříme podle vzorců
a
.
V proceduře tau použijeme příkaz det z knihovny linalg počítající determinant.
> restart:with(linalg):
> kappa:=proc(f,t)
local df, ddf, dfdf, dfddf, cross_dfddf;
df:=diff(f(t),t);
ddf:=diff(f(t),t$2);
dfdf:=simplify(sqrt(dotprod(df,df,orthogonal)));
cross_dfddf:=simplify([df[2]*ddf[3]-df[3]*ddf[2],df[3]*ddf[1]-df[1]*ddf[3],df[1]*ddf[2]-df[2]*ddf[1]]);
dfddf:=simplify(sqrt(dotprod(cross_dfddf,cross_dfddf,orthogonal)));
unapply(simplify(dfddf/ddf^3),t);
end:
> tau:=proc(f,t)
local df,ddf,dddf,cross_dfddf,dfddf,dfdddf;
;df:=diff(f(t),t);
;ddf:=diff(f(t),t$2);
dddf:=diff(f(t),t$3);
cross_dfddf:=simplify([df[2]*ddf[3]-df[3]*ddf[2],df[3]*ddf[1]-df[1]*ddf[3],df[1]*ddf[2]-df[2]*ddf[1]]);
dfddf:=simplify(sqrt(dotprod(cross_dfddf,cross_dfddf,orthogonal)));
dfdddf:=simplify(det([df,ddf,dddf]));
unapply(simplify(dfdddf/dfddf^2),t);
end:
> f:=t->[t,t^2,t^3];
> kappa1:=kappa(f,t);
> tau1:=tau(f,t);
Zadanou prostorovou křivku a její křivost a torzi si vykreslíme:
> with(plots):
> setoptions(scaling=constrained):setoptions3d(scaling=constrained):
> tubeplot(f(t),t=-1.2..1.2,radius=0.2,axes=boxed);
> plot([kappa1(t),tau1(t)],t=-1.2..1.2,color=black,thickness=[3,1]);
Pokud při vykreslování více objektů do jednoho obrázku použijeme místo složených závorek závorky hranaté, potom můžeme pomocí těchto závorek přesně určit např. barvu jednotlivých objektů nebo tloušťku vykreslované čáry.