Laboratorio di fisica computazionale
		(Prova d'esame del 29 giugno 2004)

  Moto di particella carica
  Una particella carica si muove sotto l'azione di un campo elettrico E e di un campo magnetico B costanti
  	•      Scrivere una  procedura che calcoli  le equazioni del moto della particella in funzione di E,di B 
                      e delle condizioni iniziali
  	•      Utilizzare la procedura per fare un grafico  della traiettoria nei seguenti casi
  			a.     E=0 e velocità iniziale con componente non nulla lungo B
  			b.     E parallelo a  B
  			c.     E perpendicolare a  B
  	•        Animare il moto del particella in questi tre casi

Off[General::"spell1" ]
Clear[Moto, q, m, e, b, r0, v0, t0, t1, Film, 
      p]
Moto[q_, m_, e : {_, _, _}, b : {_, _, _}, r0 : {_, _, _}, 
        v0 : {_, _, _}, t0_, 
        t1_] := 
Module[{r, v, a, F, 
          eq}, 
Clear[
          t]; 
r = {x[t] , y[t] , 
            z[t] }; 
v = {x'[t] , y'[t], z'[
              t]}; 
a = {x''[t], y''[t], z''[
              t]}; 
F = 
          q (v\[Cross]B + e); 
eq = 
          Flatten[{
Table[
                m a[[i]] == F[[i]], {i, 
                  Length[r]}], 
Table[(r[[i]] /. 
                      t -> 0) == r0[[i]], {i, 
                  Length[r]}], 
Table[(v[[i]] /. 
                      t -> 0) == v0[[i]], {i, 
                  Length[r]}]
}]; 
r /. NDSolve[eq, r, {t, t0, t1}, 
              MaxSteps -> 
                100000][[1]]
]
Film[r_, t0_, t1_, 
        np_] := 
Module[{d1, d2, d, k = -1, 
          dt = ((t1 - t0)/np)}, 
        d1 = Table[Minimize[r[[i]], 
                0 < t ≤ T, {t}][[1]], {i, Length[r]}]; 
        d2 = Table[Maximize[r[[i]], 
                0 < t ≤ T, {t}][[1]], {i, Length[r]}]; 
        d = Table[{d1[[k]], d2[[k]]}, {k, Length[d1]}]; 
        Do[
curva = 
            ParametricPlot3D[r, {t, t0, t}, DisplayFunction -> Identity, 
              PlotPoints -> Ceiling[1 + 499 (t/T)]]; 
          p = {RGBColor[1, 0, 0], PointSize[ .02], 
              Point[r]}; 
g[++k] = {p, 
              curva[[1]]}; 
Show[
            Graphics3D[Flatten[{p}]], curva, Boxed -> True, 
            Axes -> True, 
            AxesEdge -> {{1, 1}, {-1, 1}, {1, 1}}, 
            PlotRange -> d], 
{t, t0 + (10^(-6)), t1, 
            dt}]
]

Clear[x, y, z, r]
T = 5;
q = 1;
m = 0.1;
b = 1;
e = {0, 0, 0};
B = {b, 0, 0};
r0 = {0, 0, 0};
v0 = {0.1, 0, 1};
r = {x[t_], y[t_], z[t_]} = 
          Moto[q, m, e, B, r0, v0, 0, T];
ParametricPlot3D[r, {t, 0, T}, PlotPoints -> 500];

Film[r, 0, T, 10]

Clear[x, y, z, r]
T = 5;
q = 1;
m = 0.1;
b = 1;
e = {1, 0, 0};
B = {b, 0, 0};
r0 = {0, 0, 0};
v0 = {0.1, 0, 1};
r = {x[t_], y[t_], z[t_]} = 
          Moto[q, m, e, B, r0, v0, 0, T];
ParametricPlot3D[r, {t, 0, T}, PlotPoints -> 100]

Film[r, 0, T, 10]

Clear[x, y, z, r]
T = 5;
q = 1;
m = 0.1;
b = 1;
e = {0, 1 , 1};
B = {b, 0, 0};
r0 = {0, 0, 0};
v0 = {0.1, 0, 1};
r = {x[t_], y[t_], z[t_]} = 
          Moto[q, m, e, B, r0, v0, 0, T];
ParametricPlot3D[r, {t, 0, T}, PlotPoints -> 500]

Film[r, 0, T, 100]