//lancement affichage xset("color",1) xset("pixmap",1)//ouverture du buffer video xtitle("(click droit pour démarrer l''animation, click gauche pour arrêter)") titlepage(["résolution numérique d''une EDO";" ";"le pendule simple : comparaison de la solution numérique de ";" ";"d²a/dt²+w²*a=0 avec a(0)=? et da/dt=0";" ";"avec la solution théorique a(t)=a(0)*cos(w*t) "]) show_pixmap() rect=[-1,-1,1,0]; T=8; [c_i,c_x,c_y,c_w]=xclick(); while (c_i<>2)&(c_i<>5) //tant qu'on a pas fait un click droit xbasc(); clear_pixmap() xtitle("(click droit pour initialiser la position du pendule)") plot2d(0,0,-1,frameflag=3,axesflag=5,rect=rect) winnum=winsid() ; toolbar(winnum(1),'off'); show_pixmap() [c_i,x,y,c_w]=xclick();//coordonnées de la position initiale du pendule a=sign(x)*abs(atan(x/y));a0=a;l=sqrt(x^2+y^2);//calcul de l'angle a(0) w=sqrt(9.81/l);dt=0.01;da=0;//initialisation for t=0:dt:T //mise à jour du calcul de a(t) par méthode incrémentale dda=-a*w^2; da=da+dt*dda; a=a+dt*da; //changement de coordonnées angle--->(x,y) x=[x;l*sin(a)]; y=[y;-l*cos(a)]; //affichage xbasc(); clear_pixmap() plot2d([0,0;l*sin(a),l*sin(a0*cos(w*t))],[0,0;-l*cos(a),-l*cos(a0*cos(w*t))],[1 2],frameflag=3,axesflag=5,rect=rect)//les fils des pendules xstring(0.8,-0.5,["t=" string(t)]) // temps écoulé xset("color",1) xfarc(l*sin(a)-0.05,-l*cos(a)+0.05,0.1,0.1,0,360*64) // la boule du prendule xset("color",2) xfarc(l*sin(a0*cos(w*t))-0.05,-l*cos(a0*cos(w*t))+0.05,0.1,0.1,0,360*64) //la boule du prendule show_pixmap() end [c_i,x,y,c_w]=xclick(); xbasc(); clear_pixmap() xtitle("(click droit pour initialiser la position du pendule)") plot2d(0,0,-1,frameflag=3,axesflag=5,rect=rect) show_pixmap() [c_i,x,y,c_w]=xclick();//arrêter ou continuer end xset("pixmap",0)//fermeture du buffer video a=winsid(); xdel(a); //destruction de la fenêtre graphique.