Po pevné kružnici se zvnitřku kotálí další kružnice. Pevný bod na ní opisuje tzv. hypocykloidu. Napište její parametrické vyjádření.
> restart:with(plots):setoptions(scaling=constrained):
Animaci vytvoříme podobně jako u epicykloidy. Zvolíme poloměr pevné kružnice R=9 a poloměr kotálející kružnice r=2:
> hypocycloid:=t->[(R-r)*cos((r/R)*t)+r*cos(t-(r/R)*t),(R-r)*sin((r/R)*t)-r*sin(t-(r/R)*t)];
> R:=9;r:=2;interval:=9;
> A:=animatecurve([hypocycloid(t)[1],hypocycloid(t)[2],t=0..interval*2*Pi],frames=50,numpoints=200):
> B:=animate([(R-r)*cos(s)+t*(hypocycloid(s*R/r)[1]-(R-r)*cos(s)),(R-r)*sin(s)+t*
(hypocycloid(s*R/r)[2]-(R-r)*sin(s)),t=0..1],s=0..(r/R)*interval*2*Pi,frames=50,color=blue):
> C:=animate([(R-r)*cos(s)+r*cos(t),(R-r)*sin(s)+r*sin(t),t=0..2*Pi],s=0..(r/R)*interval*2*Pi,
frames=50,color=blue):
> E:=plot([R*cos(t),R*sin(t),t=0..2*Pi],color=black):
> display(A,B,C,E);
Při všech animacích musíme při změně poloměru kružnic znovu několikrát spustit příkazové řádky, aniž bychom je měnili. Nabízí se tedy vytvoření procedury, kde vstupním parametrem budou příslušné poloměry a interval animace. Např. pro hypocykloidu uvažujme následující uživatelskou proceduru:
> hypocycloid_anim:=proc(r,R,interval)
local hyp,A,B,C,E;
hyp:=t->[(R-r)*cos((r/R)*t)+r*cos(t-(r/R)*t),(R-r)*sin((r/R)*t)-r*sin(t-(r/R)*t)]:
A:=animatecurve([hyp(t)[1],hyp(t)[2],t=0..interval*2*Pi],frames=50,numpoints=200):
B:=animate([(R-r)*cos(s)+t*(hyp(s*R/r)[1]-(R-r)*cos(s)),(R-r)*sin(s)+t*(hyp(s*R/r)[2]-(R-r)*sin(s)),t=0..1],s=0..(r /R)*interval*2*Pi,frames=50,color=blue):
C:=animate([(R-r)*cos(s)+r*cos(t),(R-r)*sin(s)+r*sin(t),t=0..2*Pi],s=0..(r/R)*interval*2*Pi,frames=50,color=blue):
E:=plot([R*cos(t),R*sin(t),t=0..2*Pi],color=black):
display(A,B,C,E);
end:
Pro Steinerovu křivku ( ) a asteroidu ( ) vystačíme s příkazy:
> hypocycloid_anim(1,3,3);
> hypocycloid_anim(1,4,4);