%!
(lenses.inc) run

48 dup scale
0.01 setlinewidth
4 5 translate
0 0 0 setrgbcolor

%show axis
gsave
2 2 translate
-3.5 0 moveto
6 0 lineto
stroke
newpath
0 -3 moveto
0 3 lineto
stroke
grestore

newpath
0.8 0.8 1 setrgbcolor
2 2 1 0 360 arc
fill
0 0 0 setrgbcolor
2 2 1 0 360 arc
stroke

% red ray
gsave
1 0 0 setrgbcolor
/x 2.9 def
/Po [0 x] def
/Vo [1 0] def 
/P1 Po Vo [2 2] 1 hit def 
0 x moveto
P1 0 get P1 1 get lineto

/n [2 2] P1 gradient normalized def
/v1 n [1 0] 1.05 refraction def
/P2 P1 v1 [2 2] 1 hit def
P2 0 get P2 1 get lineto

/v2 [1 0] v1 0.326 refraction def
/p3 P2 v2 [1 0 -16 3 div] line-intersection def
p3 0 get p3 1 get lineto


/Po [0 1.1] def
/Vo [1 0] def 
/P1 Po Vo [2 2] 1 hit def 
0 1.1 moveto
P1 0 get P1 1 get lineto

/n [2 2] P1 gradient normalized def
/v1 n [1 0] 1.05 refraction def
/P2 P1 v1 [2 2] 1 hit def
P2 0 get P2 1 get lineto

/v2 [1 0] v1 .327 refraction def
/p3 P2 v2 [1 0 -16 3 div] line-intersection def
p3 0 get p3 1 get lineto
stroke

grestore

% blue ray
gsave
0 0 1 setrgbcolor
/x 2.9 def
/Po [0 x] def
/Vo [1 0] def 
/P1 Po Vo [2 2] 1 hit def 
0 x moveto
P1 0 get P1 1 get lineto

/n [2 2] P1 gradient normalized def
/v1 n [1 0] 1.05 refraction def
/P2 P1 v1 [2 2] 1 hit def
P2 0 get P2 1 get lineto

/v2 [1 0] v1 .215 refraction def
/p3 P2 v2 [1 0 -13 3 div] line-intersection def
p3 0 get p3 1 get lineto

/Po [0 1.1] def
/Vo [1 0] def 
/P1 Po Vo [2 2] 1 hit def 
0 1.1 moveto
P1 0 get P1 1 get lineto

/n [2 2] P1 gradient normalized def
/v1 n [1 0] 1.05 refraction def
/P2 P1 v1 [2 2] 1 hit def
P2 0 get P2 1 get lineto

/v2 [1 0] v1 .215 refraction def
/p3 P2 v2 [1 0 -13 3 div] line-intersection def
p3 0 get p3 1 get lineto

stroke 
grestore

gsave
1 0 0 setrgbcolor
/Helvetica findfont
.3 scalefont
setfont
4 2.5 moveto
(red ray) show
grestore

gsave
0 0 1 setrgbcolor
/Helvetica findfont
.3 scalefont
setfont
2.5 2.25 moveto
(blue ray) show
grestore

gsave
/Helvetica-Bold findfont
.3 scalefont
setfont
1 4 moveto
(chormatic aberration) show
grestore

gsave
/Helvetica findfont
.25 scalefont
setfont
0.5 2.2 moveto
(lens ) show
grestore