Nalezněte obálku normál elipsy .
Použijeme stejných procedur jako v předešlém příkladě:
> restart:with(plots):setoptions(scaling=constrained):
> evolute:=proc(f)
local df,ddf,dfdf,dfddf,r_osc;
df:=diff(f(t),t);
ddf:=diff(f(t),t$2);
dfdf:=df[1]*df[1]+df[2]*df[2];
dfddf:=df[1]*ddf[2]-df[2]*ddf[1];
r_osc:=t->[-df[2]*dfdf/dfddf,df[1]*dfdf/dfddf];
simplify(evalm(f(t)+r_osc(t)));
end:
> plot_evolute:=proc(f,t1,t2,k)
local df,ddf,dfdf,dfddf,r_osc,n_par,N_PLOT,F_PLOT;
df:=diff(f(t),t);
ddf:=diff(f(t),t$2);
dfdf:=df[1]*df[1]+df[2]*df[2];
dfddf:=df[1]*ddf[2]-df[2]*ddf[1];
r_osc:=t->[-df[2]*dfdf/dfddf,df[1]*dfdf/dfddf];
n_par:=evalm(f(t)+s*r_osc(t));
N_PLOT:=seq(plot([n_par[1],n_par[2],s=-1..1],color=blue),t=seq(t1+(t2-t1)*i/k,i=0..k)):
F_PLOT:=plot([f(t)[1],f(t)[2],t=t1..t2],thickness=3,color=red):
display({N_PLOT,F_PLOT},scaling=constrained);
end:
> ellipse:=t->[a*cos(t),b*sin(t)];
> evolute(ellipse);
a:=5;b:=3;plot_evolute(ellipse,0,2*Pi,32);
Uvedené procedury můžeme vyzkoušet např. také při hledání obálky normál paraboly, traktrix, srdcovky nebo logaritmické spirály:
> parabola:=t->[t,t^2];
> evolute(parabola);
> plot_evolute(parabola,-1,1,20);
> tractrix:=t->[a*(ln(tan(t/2)))+cos(t),a*sin(t)];
> a:=1:plot_evolute(tractrix,0.25,Pi-0.25,30);
> cardioid:=t->[2*r*cos(t)-r*cos(2*t),2*r*sin(t)-r*sin(2*t)];
> r:=1:plot_evolute(cardioid,0.1,2*Pi-0.1,46);
> logspiral:=t->[a^t*cos(t),a^t*sin(t)];
> a:=1.5:plot_evolute(logspiral,0*Pi,2*Pi,37);