10 CLS:SCREEN 1 20 LINE (0,0)-(320,10),,BF 30 LINE (0,190)-(320,200),,BF 40 LINE (0,0)-(5,200),,BF 50 LINE (315,0)-(320,200),,BF 60 LINE (40,45)-(280,50),,BF 70 LOCATE 4,15:PRINT"THE RAINBOW" 80 GOSUB 1000 90 LOCATE 8,11:PRINT"PARAMETER YOU CHOOSE" 95 LOCATE 10,5:PRINT"1. DROP RADIUS" 98 LINE (40,90)-(280,95),,BF 99 GOSUB 1000 100 LOCATE 14,6:PRINT"WATCH EACH RAY STRIKE THE DROP" 110 LOCATE 16,12:PRINT"PAY ATTENTION TO -" 112 LINE (80,130)-(240,133),,BF 115 GOSUB 1000 120 LOCATE 19,3:PRINT"1. D - THE MAXIMUM DEVIATION ANGLE" 125 GOSUB 1000 130 LOCATE 21,3:PRINT"2. I - INCIDENCE ANGLE OF RAINBOW RAY" 140 GOSUB 1000 150 SCREEN 1:CLS 160 LOCATE 5,9:PRINT"CHOOSE RAINDROP RADIUS" 162 LOCATE 10,5:PRINT"ACCEPTED SIZE RANGE 1 < R < 90" 163 GOSUB 1000 164 LOCATE 13,3:PRINT"SMALL DROPS SHOW DIVERGENCE OF RAYS" 165 GOSUB 1000 166 LOCATE 15,5:PRINT"LARGE DROPS SHOW PATHS OF RAYS" 167 GOSUB 1000 168 LOCATE 18,17:INPUT"R = ",RC 170 XC=310-RC:YC=10+RC:LL=210-RC 179 CLS 180 CIRCLE (XC,YC),RC,,,,.9 190 PI=3.141593 200 N=1.33:REM INDEX OF REFRACTION 210 DRC=PI/180 215 IF RC>30 THEN 500 220 FOR K = 0 TO 90 STEP 6 230 KR=K*DRC 240 I = PI/2-KR 250 Y=YC-.9*RC*COS(KR) 260 X=XC-RC*SIN(KR) 280 RNV=SIN(I)/N 290 R=ATN(RNV/SQR(-RNV^2+1)) 300 RF1=2*R-I:RF2=4*R-I-PI:RF3=RF2-I 302 LOCATE 1,1:PRINT" " 305 LOCATE 1,1:PRINT"I =";I/DRC;" D =";RF3/DRC+PI/DRC 308 LINE (50,Y)-(X,Y) 310 LINE (X,Y)-(XC+RC*COS(RF1),YC-.9*RC*SIN(RF1)) 320 LINE (XC+RC*COS(RF1),YC-.9*RC*SIN(RF1))-(XC+RC*COS(RF2),YC-.9*RC*SIN(RF2)) 330 XD=XC+RC*COS(RF2):YD=YC-.9*RC*SIN(RF2) 340 LINE (XC+RC*COS(RF2),YC-.9*RC*SIN(RF2))-(XD+LL*COS(RF3),YD-.9*LL*SIN(RF3)) 360 GOSUB 1000 370 NEXT K 380 END 500 FOR K = 10 TO 90 STEP 10 510 KR=K*DRC 520 I = PI/2-KR 530 Y=YC-.9*RC*COS(KR) 540 X=XC-RC*SIN(KR) 550 RNV=SIN(I)/N 560 R=ATN(RNV/SQR(-RNV^2+1)) 570 RF1=2*R-I:RF2=4*R-I-PI:RF3=RF2-I 572 X1=XC+RC*COS(RF1):DX1=(X1-X)/100 573 Y1=YC-.9*RC*SIN(RF1):DY1=(Y1-Y)/100 574 X2=XC+RC*COS(RF2):DX2=(X2-X1)/100 575 Y2=YC-.9*RC*SIN(RF2):DY2=(Y2-Y1)/100 576 X3=X2+LL*COS(RF3):DX3=COS(RF3) 577 Y3=Y2-.9*LL*COS(RF3):DY3=-.9*SIN(RF3) 580 LOCATE 1,1:PRINT" " 590 LOCATE 1,1:PRINT"I =";I/DRC;" D =";RF3/DRC+PI/DRC 595 FOR J=0 TO 300 597 IF X<50+J THEN 605 600 PSET (50+J,Y) 602 NEXT J 605 FOR J = 0 TO 100 610 PSET (X+J*DX1,Y+J*DY1) 612 NEXT J 615 FOR J = 0 TO 100 620 PSET (X1+J*DX2,Y1+J*DY2) 622 NEXT J 625 FOR J = 0 TO LL 630 PSET (X2+J*DX3,Y2+J*DY3) 632 NEXT J 650 NEXT K 660 END 1000 FOR I = 1 TO 2000 1010 NEXT I 1020 RETURN  J = 0 TO LL 630 PSET (X2+J*DX3,Y2+J*DY3) 632 NEXT J