Differenza fra un raccordo con continuità C1 e G1

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);
Link al pdf animato (visualizzabile con Acrobat Reader)