1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
program mouvement_pendule_double;
uses wincrt,wingraph;
const g=9.8;
N=600; { erreur 202 runtime, je dois limite la taille des variables... donc limitation du N}
deltaT=1e-2;
type tableau = array [0..N] of real;
type pendule2 = record
l1:real;
l2:real;
m1:real;
m2:real;
alpha:real;
beta:real;
end;
var penduledble : pendule2;
fichierpenduledble : file of pendule2;
P1,P2,p3,p4: tableau;
i,j,k,b:integer;
procedure ct( var tab3,tab4,tab5,tab6:tableau;pas,long1,long2,masse1,masse2,a1,a2:real);
var i:integer;
tab1,tab2:tableau;
U1,U2,U3,U4:real;
V1,V2,V3,V4:real;
begin
tab1[0]:=0; {angle1 derivee premiere}
tab2[0]:=0; {angle2 derivee premiere}
tab3[0]:=0; {angle1}
tab4[0]:=0; {angle2}
U1:=0;
U2:=0;
U3:=0;
U4:=0;
V1:=0;
V2:=0;
V3:=0;
V4:=0;
for i:=1 to N do
begin
U1:=(masse2*sin(a1-a2)*tab1[i-1]*tab1[i-1])/(masse1+masse2*sin(a1-a2)*sin(a1-a2));
U2:=(masse2*g*sin(a2)*cos(a1-a2))/(long1*(masse1+masse2*sin(a1-a2)));
U3:=-(masse2*long2*sin(a1-a2)*tab2[i-1]*tab2[i-1])/(long1*(masse1+masse2*sin(a1-a2)*sin(a1-a2)));
U4:=-((masse1+masse2)*g*sin(a1))/(long1*(masse1+masse2*sin(a1-a2)*sin(a1-a2)));
tab1[i]:=pas*(U1+U2+U3+U4)-tab1[i-1];
V1:=(masse2*cos(a1-a2)*sin(a1-a2)*tab2[i-1]*tab2[i-1])/(masse1+masse2*sin(a1-a2)*sin(a1-a2));
V2:=((masse1+masse2)*g*sin(a1))/(long2*(masse1+masse2*sin(a1-a2)*sin(a1-2)));
V3:=(-(masse1+masse2)*long1*sin(a1-a2)*tab1[i-1]*tab1[i-1])/(long2*(masse1+masse2*sin(a1-a2)*sin(a1-a2)));
V4:=(-(masse1+masse2)*g*sin(a2))/(long1*(masse1+masse2*sin(a1-a2)*sin(a1-a2)));
tab2[i]:=pas*(V1+V2+V3+V4)-tab2[i-1];
tab3[i]:=long1*sin(tab1[i]);
tab4[i]:=-long1*cos(tab1[i]);
tab5[i]:=long2*sin(tab2[i]);
tab6[i]:=-long2*cos(tab2[i]);
end;
end;
begin
with penduledble do
begin
m1:=1;
m2:=5;
l1:=5;
l2:=1;
alpha:=pi/4;
beta:=pi/6;
end;
ct(P1,P2,P3,P4,deltaT,penduledble.l1,penduledble.l2,penduledble.m1,penduledble.m2,penduledble.alpha,penduledble.beta);
{for i:=1 to N do writeln(PD2[i]);
writeln(PD2[N]);}
debutgraphe;
begin
echelle(-7,7,-7,7);
axes_gradues;
for i:=1 to N do
begin
for j:=1 to 10000 do
for k:=1 to 1000 do b:=b+1;
efface_fenetre;
echelle(-7,7,-7,7);
segment(0,0,P1[i],P2[i]);
segment(P1[i],P2[i],P3[i],P4[i]);
end;
end;
fingraphe;
end. |
Partager