**DEFDBL A-Z**

**CLS**

**COLOR 15**

**LOCATE 6, 1**

**PRINT " PROGRAM 'CAUSTIC'"**

**PRINT**

**PRINT**

**PRINT "The caustic originates in spherical aberration. In the third
order"**

**PRINT "approximation the height of intersection of a ray in the
paraxial"**

**PRINT "plane is proportional to the cube of the height in the
pupil."**

**PRINT "In the graph the pupil is to the left at a large distance
X0"**

**PRINT "and has a large radius RP in arbitrary units."**

**PRINT "The graph begins at x pixels (0<x<640) to the left of
the paraxial plane"**

**PRINT "It is drawn the paraxial plane and an even number N of
rays."**

**PRINT "The default values are those of Fig.4.18. "**

**PRINT "To finish put N = 0"**

**DO: LOOP WHILE INKEY$ = ""**

**bv = .25**

**x0 = -8000**

**rp = 8000**

**x = 147**

**n = 10**

**SCREEN 12**

**CLS**

**DO**

**PRINT "B1 coefficient ="; bv;**

**INPUT a$: IF a$ <> "" THEN bv = VAL(a$)**

**PRINT "Distance to the pupil X0 ="; x0;**

**INPUT a$: IF a$ <> "" THEN x0 = VAL(a$)**

**PRINT "Radius of the pupil RP ="; rp;**

**INPUT a$: IF a$ <> "" THEN rp = VAL(a$)**

**PRINT "Distance from paraxial plane to the left border x =";
x;**

**INPUT a$: IF a$ <> "" THEN x = VAL(a$)**

**PRINT "Half number of rays N/2 ="; n;**

**INPUT a$: IF a$ <> "" THEN n = VAL(a$)**

**IF n = 0 THEN END**

**CLS**

**FOR y0 = -rp TO rp STEP rp / n**

**b = bv / 1000000000**

**y = b * y0 ^ 3**

**y1 = (y - y0) * (640 -
x) / (x - x0) + y**

**yc0 = -y0 + 240**

**yc1 = -y1 + 240**

**LINE (x0, yc0)-(640, yc1)**

**NEXT y0**

**LINE (x, 0)-(x, 480)'**

**DO: LOOP WHILE INKEY$ = ""**

**LOOP**