Arecibo=Module[{zoom,scale,ZA,lambda,theta,A,B,Xmin,Xmax,Ymin,Ymax,n,nmin,nmax,PlotCenter,PlotCircles,b,phi,x,y,z,PlotRays,Z},
Manipulate[
scale=zoom/100;
theta=-Pi ZA;
A=2.7;
B=10;
Xmin=-1/scale-0.1;
Xmax=1/scale+0.1;
Ymin=-1-0.1;
Ymax=-1+2/scale+0.1;
nmin=-5;
nmax=5;
PlotCenter=ListPlot[{{0,0}},PlotMarkers->Automatic,PlotStyle->{Cyan}];
PlotCircles=ParametricPlot[{{Sin[z],-Cos[z]},{Sin[z]/2,-Cos[z]/2}},{z,-Pi, Pi},PlotRange->{{Xmin,Xmax},{Ymin,Ymax}},PlotStyle->{{Black,Dashed},{Black,Dashed}},AspectRatio->Automatic];
b=Table[0.1 (n+nmin-1),{n,1,nmax-nmin+1}];
phi=Table[ArcSin[b[[n]]],{n,1,nmax-nmin+1}];
x=Table[Sin[phi[[n]]+theta],{n,1,nmax-nmin+1}];
y=Table[-Cos[phi[[n]]+theta],{n,1,nmax-nmin+1}];
PlotRays={
Graphics[{Red,Thickness[0.001],Arrowheads[0.015],Arrow[{{-(B-1) Sin[theta],(B-1) Cos[theta]},{Sin[theta],-Cos[theta]}}]}],Graphics[{Red,Thickness[0.001],Arrowheads[0.015],Arrow[{{Sin[theta],-Cos[theta]},{-(A-1)Sin[theta],(A-1)Cos[theta]}}]}]
};
Do[AppendTo[PlotRays,
{Graphics[{Red,Thickness[0.001],Arrowheads[0.015],Arrow[{{x[[n]]-B Sin[theta],y[[n]]+B Cos[theta]},{x[[n]],y[[n]]}}]}],
Graphics[{Red,Thickness[0.001],Arrowheads[0.015],Arrow[{{x[[n]],y[[n]]},{x[[n]]-(A-Cos[phi[[n]]]) Sin[2 phi[[n]]+theta],y[[n]]+(A-Cos[phi[[n]]]) Cos[2 phi[[n]]+theta]}}]}]
}
],{n,1,nmax-nmin+1}];
Show[
PlotCircles,
PlotCenter,
ParametricPlot[{Sin[z],-Cos[z]},{z,-0.27 Pi,0.27 Pi},PlotStyle->{Thickness[0.007],Cyan},PlotRange->{{Xmin,Xmax},{Ymin,Ymax}}],
Graphics[{Cyan,Thickness[0.01],Line[{{0.5 Sin[theta],-0.5 Cos[theta]},{0.6 Sin[theta],-0.6 Cos[theta]}}]}],
PlotRays,
ParametricPlot[
If[lambda<Cos[Z],{Cos[theta]Sin[Z]+Sin[theta]lambda,Sin[theta]Sin[Z]-Cos[theta]lambda},
{Sin[Z+theta]-(lambda-Cos[Z]) Sin[2Z+theta],-Cos[Z+theta]+(lambda-Cos[Z]) Cos[2Z+theta]}],
{Z,-Pi/5,Pi/5},
PlotStyle->Green
],
ImageSize->Large
],
{{zoom,100,"Zoom (%)"},100,300,1,Appearance->"Labeled"},{{ZA,0,"Zenith Angle/π"},-0.1,0.1,0.01,Appearance->"Labeled"},{{lambda,-2,"Wave Front Location"},-2,2.7},
LabelStyle->{Directive[12],FontFamily->"Arial"},ControlPlacement->Right,ContinuousAction->True
]
]

Export["Arecibo.cdf",Arecibo,"CDF"]