dotCirc[{x_,y_,r_,theta_,pointsize_}]:=
{Circle[{x,y},r],PointSize[pointsize],Point[{x+r Cos[theta],y+r Sin[theta]}]}
circArray[r_,theta_,pointsize_,extent_,step_,phase_]:=Module[{},
Partition[Flatten[Table[{x,y,r,theta+x*phase+y*phase,pointsize},{x,-extent,extent,step},{y,-extent,extent,step}]],5]
]

circRad = 0.15;
theta = Pi/1.;
pointsize = 0.02;
extent = 4;
step = 0.5;
phase = Pi/4.;
Graphics[Map[dotCirc,circArray[circRad,theta,pointsize,extent,step,phase]]]

Animate[Graphics[Map[dotCirc,circArray[circRad,theta,pointsize,extent,step,phase]]],{theta,0,2Pi}]

Manipulate[Graphics[Map[dotCirc,circArray[circrad,theta,pointsize,extent,step,phase,showcirc]]]
,{{showcirc,True,"Show Circles"},{True,False}}
,{{theta,0,"Dot Angle"},0,2Pi,Pi/10,Appearance->"Labeled"}
,{{pointsize,0.018,"Dot Size"},0,1,Appearance->"Labeled"}
,{{phase,2,"Phase Diff"},0,2Pi,Appearance->"Labeled"}
,{{step,0.25,"Circle Separation"},0,1,Appearance->"Labeled"}
,{{extent,2,"Plot Extent"},1,5,Appearance->"Labeled"}
,{{circrad,0.15,"Circle Radius"},0.01,1,Appearance->"Labeled"}
,Initialization:>
{
dotCirc[{x_,y_,r_,theta_,pointsize_,showcirc_}]:=If[showcirc,
{Circle[{x,y},r],PointSize[pointsize],Point[{x+r Cos[theta],y+r Sin[theta]}]}
,
{PointSize[pointsize],Point[{x+r Cos[theta],y+r Sin[theta]}]}]
,
circArray[r_,theta_,pointsize_,extent_,step_,phase_,showcirc_]:=Module[{},
Partition[Flatten[Table[{x,y,r,theta+x*phase+y*phase,pointsize,showcirc},{x,-extent,extent,step},{y,-extent,extent,step}]],6]
]}]

SetDirectory[]

(*Export animations)

anim=Animate[
circRad = 0.15;
theta = Pi/1.;
pointsize = 0.02;
extent = 2;
step = 0.25;
phase = Pi/2.;
GraphicsRow[{
Graphics[Map[dotCirc,circArray[circRad,theta,pointsize,extent,step,phase,False]],ImageSize->{400,400}],
Graphics[Map[dotCirc,circArray[circRad,theta,pointsize,extent,step,phase,True]],ImageSize->{400,400}]
}
]
,{theta,0,10.*Pi,Pi/20.,Appearance->"Labeled"}
,DisplayAllSteps->True
];

Export["circleWaves.mov",anim]

SystemOpen["circleWaves.mov"]

(*The above doesn't work for some reason. Try another route*)

(*Generate hundreds of .jpg files in the current working directory*)
count=100;
anim=Do[
im=GraphicsRow[{
Graphics[Map[dotCirc,circArray[circRad,theta,pointsize,extent,step,phase,False]],ImageSize->{400,400}],
Graphics[Map[dotCirc,circArray[circRad,theta,pointsize,extent,step,phase,True]],ImageSize->{400,400}]
}
];
filename="im"<>ToString[count]<>".jpg";
Export[filename,im];
count=count+1
,{theta,0,10.*Pi,Pi/40.}
];

(*Convert this to a movie with the following command in bash
mencoder "mf://*.jpg"-o movie.avi-ovc lavc-lavcopts vcodec=mjpeg*
I did this on my Mac*)