>    restart;
with(plots):
with(plottools):

Warning, the name changecoords has been redefined

Warning, the name arrow has been redefined

>    Rsys := 10.:
m1 := 30.:
m2 := 16.:
Npart := 1000:
Pimpact := 4:
H3 := 32.:
Rmin := Rsys/10:
G:=1:
Nt:=300:
dt:=0.1:
eps:=Rsys/50:

>    RAN := rand(-100..100):

Condiciones Iniciales

>    for i from 1 to Npart do
  rtt:=0.;
  for k while (rtt > Rsys or rtt <Rmin) do
    xx:=(RAN()/100)*Rsys;
    yy:=(RAN()/100)*Rsys;
    zz:=0.;
    rtt := sqrt(xx^2 + yy^2 + zz^2);
  end do;
  r3[i,1]:=xx;
  r3[i,2]:=yy;
  r3[i,3]:=0.;

  v3[i,1]:= -sqrt(m1/rtt) * r3[i,2]/rtt;
  v3[i,2]:= +sqrt(m1/rtt) * r3[i,1]/rtt;
  v3[i,3]:=0.
end do:

r1[1,1] := 0.: v1[1,1]:=0:
r1[1,2] := 0.: v1[1,2]:=0:
r1[1,3] := 0.: v1[1,3]:=0:

r2[1,1] := Pimpact: v2[1,1]:=0:
r2[1,2] := 0.:      v2[1,2]:=0:
r2[1,3] := H3:      v2[1,3]:=-4.5:

>    plt_1:=plot([seq([r3[i,1],r3[i,2]],i=1..Npart)],x=-Rsys-1..Rsys+1, y=-Rsys-1..Rsys+1, style=point, color=blue):
cw_1:= disk ([r1[1,1],r1[1,2]], 0.25, color=red):
display({plt_1, cw_1},axes=boxed,scaling=constrained,title=`t=0`);

pltz_1:=plot([seq([r3[i,1],r3[i,3]],i=1..Npart)],x=-Rsys-1..Rsys+1, y=33..-5, style=point, color=blue):
pert_1:= disk ([r2[1,1], r2[1,3]], 0.25, color=yellow):
cwz_1:= disk ([r1[1,1],r1[1,3]],.45, color=red):
display({pltz_1, pert_1, cwz_1},axes=boxed,scaling=constrained,title=`t=0`);

[Maple Plot]

[Maple Plot]

>    Aceleracion := proc (i, ac, pos)
  local r13,r23,acel,r21;
  global r1,r2,r3,G,m1,m2,eps;
  if (ac=3) then
    r13:=sqrt((pos[i,1]-r1[1,1])^2 + (pos[i,2]-r1[1,2])^2 + (pos[i,3]-r1[1,3])^2);
    r23:=sqrt((pos[i,1]-r2[1,1])^2 + (pos[i,2]-r2[1,2])^2 + (pos[i,3]-r2[1,3])^2);
    acel[1,1] := -G*m1*(pos[i,1]-r1[1,1])/(r13+eps)^3 - G*m2*(pos[i,1]-r2[1,1])/(r23+eps)^3;
    acel[1,2] := -G*m1*(pos[i,2]-r1[1,2])/(r13+eps)^3 - G*m2*(pos[i,2]-r2[1,2])/(r23+eps)^3;
    acel[1,3] := -G*m1*(pos[i,3]-r1[1,3])/(r13+eps)^3 - G*m2*(pos[i,3]-r2[1,3])/(r23+eps)^3;
    return(acel);
  end if;

  if (ac=2) then
    r21:=sqrt((pos[i,1]-r1[1,1])^2 + (pos[i,2]-r1[1,2])^2 + (pos[i,3]-r1[1,3])^2);
    acel[1,1] := -G*m1*(pos[1,1]-r1[1,1])/(r21+eps)^3;
    acel[1,2] := -G*m1*(pos[1,2]-r1[1,2])/(r21+eps)^3;
    acel[1,3] := -G*m1*(pos[1,3]-r1[1,3])/(r21+eps)^3;
    return(acel);
  end if;

  if (ac=1) then
    r21:=sqrt((r2[i,1]-pos[1,1])^2 + (r2[i,2]-pos[1,2])^2 + (r2[i,3]-pos[1,3])^2);
    acel[1,1] := G*m2*(r2[1,1]-pos[1,1])/(r21+eps)^3;
    acel[1,2] := G*m2*(r2[1,2]-pos[1,2])/(r21+eps)^3;
    acel[1,3] := G*m2*(r2[1,3]-pos[1,3])/(r21+eps)^3;
    return(acel);
  end if;
end proc:

i = i-esima particula m3
ac = indicador para la particula que se esta moviendo
dt = paso de tiempo
vel = velocidad
pos = posicion

>    Sapito := proc (pp, ac, dtt, vel, pos)
  local acc, v12, rr2, vv2;

  acc := Aceleracion (pp, ac, pos);

  v12[1,1]:= vel[pp,1] + dtt*acc[1,1]/2;
  v12[1,2]:= vel[pp,2] + dtt*acc[1,2]/2;
  v12[1,3]:= vel[pp,3] + dtt*acc[1,3]/2;

  rr2[1,1]:= pos[pp,1] + dtt*v12[1,1];
  rr2[1,2]:= pos[pp,2] + dtt*v12[1,2];
  rr2[1,3]:= pos[pp,3] + dtt*v12[1,3];

  acc:= Aceleracion (1, ac, rr2);

  vv2[1,1]:= v12[1,1] + dtt*acc[1,1];
  vv2[1,2]:= v12[1,2] + dtt*acc[1,2];
  vv2[1,3]:= v12[1,3] + dtt*acc[1,3];

  return (rr2,vv2);
end proc:

>    for i from 1 to Nt do
  for k from 1 to Npart do
    (tmp1,tmp2):=Sapito(k, 3, dt, v3, r3);
    r3[k,1]:=tmp1[1,1]; v3[k,1]:=tmp2[1,1];
    r3[k,2]:=tmp1[1,2]; v3[k,2]:=tmp2[1,2];
    r3[k,3]:=tmp1[1,3]; v3[k,3]:=tmp2[1,3];
  end do;

  (tmp1,tmp2):=Sapito(1, 2, dt, v2, r2);
  r2[1,1]:=tmp1[1,1]; v2[1,1]:=tmp2[1,1];
  r2[1,2]:=tmp1[1,2]; v2[1,2]:=tmp2[1,2];
  r2[1,3]:=tmp1[1,3]; v2[1,3]:=tmp2[1,3];

  (tmp1,tmp2):=Sapito(1, 1, dt, v1, r1);
  r1[1,1]:=tmp1[1,1]; v1[1,1]:=tmp2[1,1];
  r1[1,2]:=tmp1[1,2]; v1[1,2]:=tmp2[1,2];
  r1[1,3]:=tmp1[1,3]; v1[1,3]:=tmp2[1,3];

  if ((i mod 5) = 0) then
    print('Pasos',i);
    cw[i]:= disk ([r1[1,1],r1[1,2]], 0.25, color=red):
    plt[i]:=plot([seq([r3[ii,1],r3[ii,2]], ii=1..Npart)],x=-15..25, y=-20..20, style=point,title=convert(i,string), color=blue):
    anima[i]:=display(cw[i],plt[i]);
  end if;

  if ((i mod 5) = 0) then
     pltz[i]:=plot([seq([r3[i,1],r3[i,3]],i=1..Npart)],x=-15..25, y=32..-25, style=point, color=blue, title=convert(i,string)):
     pert[i]:= disk ([r2[1,1], r2[1,3]], 0.25, color=yellow):
     cwz[i]:= disk ([r1[1,1],r1[1,3]],.45, color=red):
     animaz[i]:=display({pltz[i], pert[i], cwz[i]},axes=boxed,scaling=constrained);
   end if;

end do:

>    display({seq(animaz[i*5],i=1..30)}, axes=boxed, insequence=true, scaling=constrained);
display({seq(anima[i*5],i=1..30)}, axes=boxed, insequence=true, scaling=constrained);

[Maple Plot]

[Maple Plot]

>   

>   

Maple TM is a registered trademark of Waterloo Maple Inc.
Math rendered by WebEQ