AB=100; BC=225; CD=225; DA=100; loop=$t*360; phi=2*loop; color ("red") rotate ([0,0,phi]) translate ([0,-2.5,0]) square ([AB,4]); translate ([0,-2,0]) square ([DA,4]); BD=sqrt(pow(AB,2)+pow(DA,2)-2*AB*DA*cos(phi)); ADB=acos((pow(DA,2)+pow(BD,2)-pow(AB,2))/(2*BD*DA)); BDC=acos((pow(BD,2)+pow(CD,2)-pow(BC,2))/(2*BD*CD)); BCD=acos((pow(BC,2)+pow(CD,2)-pow(BD,2))/(2*BC*CD)); hoek1=-((BCD-(180-ADB-BDC))); hoek2=-((BCD-(180+ADB-BDC))); if (loop<=180) { if (phi>0&&phi<=180) { color ([0,1,0]) translate ([DA,0,0]) rotate ([0,0,180-ADB-BDC]) translate ([0,-2,0]) square ([CD,4]); translate ([AB*cos(phi),AB*sin(phi),0]) rotate ([0,0,hoek1]) translate ([0,-2,0]) square ([BC,4]); } if (phi>180&&phi<360) { color ([0,1,0]) translate ([DA,0,0]) rotate ([0,0,180+ADB-BDC]) translate ([0,-2,0]) square ([CD,4]); translate ([AB*cos(phi),AB*sin(phi),0]) rotate ([0,0,hoek2]) translate ([0,-2,0]) square ([BC,4]); }; } else { phi=phi-360; if (phi>=0&&phi<=180) { color ([0,1,0]) translate ([DA,0,0]) rotate ([0,0,hoek1+180]) translate ([0,-2,0]) square ([CD,4]); translate ([AB*cos(phi),AB*sin(phi),0]) rotate ([0,0,180-ADB-BDC+180]) translate ([0,-2,0]) square ([BC,4]); } if (phi>180&&phi<=360) { color ([0,1,0]) translate ([DA,0,0]) rotate ([0,0,hoek2+180]) translate ([0,-2,0]) square ([CD,4]); // CD translate ([AB*cos(phi),AB*sin(phi),0]) rotate ([0,0,180+ADB-BDC+180]) translate ([0,-2,0]) square ([BC,4]); // BC }; };