import graph; import animate; import x11colors; animation A=animation("C1G1"); A.global=false; defaultpen(fontsize(30pt)); pen shortdashed=linetype(new real[] {3,3}); pair P0=(0,1), P1=(1,3), P2=(2,0), P3=(3,1); real x(real t) {return P0.x*(1-t)^3+P1.x*3*t*(1-t)^2+P2.x*3*t^2*(1-t)+P3.x*t^3;} real y(real t) {return P0.y*(1-t)^3+P1.y*3*t*(1-t)^2+P2.y*3*t^2*(1-t)+P3.y*t^3;} pair Q0=(3,1), Q1=(4,2), Q2=(5,1), Q3=(3,0); real x2(real t) {return Q0.x*(1-t)^3+Q1.x*3*t*(1-t)^2+Q2.x*3*t^2*(1-t)+Q3.x*t^3;} real y2(real t) {return Q0.y*(1-t)^3+Q1.y*3*t*(1-t)^2+Q2.y*3*t^2*(1-t)+Q3.y*t^3;} pair P0g=(0,-2), P1g=(1,0), P2g=(2,-3), P3g=(3,-2); real xg(real t) {return P0g.x*(1-t)^3+P1g.x*3*t*(1-t)^2+P2g.x*3*t^2*(1-t)+P3g.x*t^3;} real yg(real t) {return P0g.y*(1-t)^3+P1g.y*3*t*(1-t)^2+P2g.y*3*t^2*(1-t)+P3g.y*t^3;} pair Q0g=(3,-2), Q1g=(5,0), Q2g=(5,-2), Q3g=(3,-3); real x2g(real t) {return Q0g.x*(1-t)^3+Q1g.x*3*t*(1-t)^2+Q2g.x*3*t^2*(1-t)+Q3g.x*t^3;} real y2g(real t) {return Q0g.y*(1-t)^3+Q1g.y*3*t*(1-t)^2+Q2g.y*3*t^2*(1-t)+Q3g.y*t^3;} int NN=50; real h=1/NN; for(int i=0; i < NN; ++i) { picture pic; size(pic,30cm); real t=h*i; dot(pic,"$P_0$",P0, red+linewidth(4)); dot(pic,"$P_1$",P1, red+linewidth(4)); dot(pic,"$P_2$",P2, red+linewidth(4)); draw(pic,P0--P1,red+shortdashed); draw(pic,P1--P2,red+shortdashed); draw(pic,P2--P3,red+shortdashed); draw(pic,graph(x,y,0,1),blue+linewidth(2)); dot(pic,Q0,orange+linewidth(5)); dot(pic,"$P_3=Q_0$",P3, red+linewidth(4)); dot(pic,"$Q_1$",Q1,orange+linewidth(5)); dot(pic,"$Q_2$",Q2,orange+linewidth(5)); dot(pic,"$Q_3$",Q3,orange+linewidth(5)); draw(pic,Q0--Q1, orange+shortdashed); draw(pic,Q1--Q2, orange+shortdashed); draw(pic,Q2--Q3, orange+shortdashed); draw(pic,graph(x2,y2,0,1),deepgreen+linewidth(2)); pair xx=(x(t),y(t)); dot(pic, xx,linewidth(6) ); dot(pic,"$P_0$",P0g, red+linewidth(4)); dot(pic,"$P_1$",P1g, red+linewidth(4)); dot(pic,"$P_2$",P2g, red+linewidth(4)); draw(pic,P0g--P1g,red+shortdashed); draw(pic,P1g--P2g,red+shortdashed); draw(pic,P2g--P3g,red+shortdashed); draw(pic,graph(xg,yg,0,1),blue+linewidth(2)); dot(pic,Q0g,orange+linewidth(5)); dot(pic,"$P_3=Q_0$",P3g, red+linewidth(4)); dot(pic,"$Q'_1$",Q1g,orange+linewidth(5)); dot(pic,"$Q_2$",Q2g,orange+linewidth(5)); dot(pic,"$Q_3$",Q3g,orange+linewidth(5)); draw(pic,Q0g--Q1g, orange+shortdashed);; draw(pic,Q1g--Q2g, orange+shortdashed); draw(pic,Q2g--Q3g, orange+shortdashed); draw(pic,graph(x2g,y2g,0,1),deepgreen+linewidth(2)); pair xxg=(xg(t),yg(t)); dot(pic, xxg,linewidth(6) ); A.add(pic); } int NN=50; real h=1/NN; for(int i=0; i < NN; ++i) { picture pic; size(pic,30cm); real t=h*i; dot(pic,"$P_0$",P0, red+linewidth(4)); dot(pic,"$P_1$",P1, red+linewidth(4)); dot(pic,"$P_2$",P2, red+linewidth(4)); draw(pic,P0--P1,red+shortdashed); draw(pic,P1--P2,red+shortdashed); draw(pic,P2--P3,red+shortdashed); draw(pic,graph(x,y,0,1),blue+linewidth(2)); dot(pic,Q0,orange+linewidth(5)); dot(pic,"$P_3=Q_0$",P3, red+linewidth(4)); dot(pic,"$Q_1$",Q1,orange+linewidth(5)); dot(pic,"$Q_2$",Q2,orange+linewidth(5)); dot(pic,"$Q_3$",Q3,orange+linewidth(5)); draw(pic,Q0--Q1, orange+shortdashed); draw(pic,Q1--Q2, orange+shortdashed); draw(pic,Q2--Q3, orange+shortdashed); draw(pic,graph(x2,y2,0,1),deepgreen+linewidth(2)); pair xx=(x2(t),y2(t)); dot(pic, xx, linewidth(6) ); dot(pic,"$P_0$",P0g, red+linewidth(4)); dot(pic,"$P_1$",P1g, red+linewidth(4)); dot(pic,"$P_2$",P2g, red+linewidth(4)); draw(pic,P0g--P1g,red+shortdashed); draw(pic,P1g--P2g,red+shortdashed); draw(pic,P2g--P3g,red+shortdashed); draw(pic,graph(xg,yg,0,1),blue+linewidth(2)); dot(pic,Q0g,orange+linewidth(5)); dot(pic,"$P_3=Q_0$",P3g, red+linewidth(4)); dot(pic,"$Q'_1$",Q1g,orange+linewidth(5)); dot(pic,"$Q_2$",Q2g,orange+linewidth(5)); dot(pic,"$Q_3$",Q3g,orange+linewidth(5)); draw(pic,Q0g--Q1g, orange+shortdashed); draw(pic,Q1g--Q2g, orange+shortdashed); draw(pic,Q2g--Q3g, orange+shortdashed); draw(pic,graph(x2g,y2g,0,1),deepgreen+linewidth(2)); pair xxg=(x2g(t),y2g(t)); dot(pic, xxg ,linewidth(6) ); A.add(pic); } A.movie(loops=3,delay=100);