REM mw1bbc.bas - jackord@kw.igs.net - revised 31 Dec 07 - BBC BASIC 5.50b REM wave striking an interface between n[left]=1 and n[right]=2 *FLOAT64 INSTALL @lib$+"WINLIB5" REM Initialize Window button1% = FN_button("Component", 10, 5, 80, 20, FN_setproc(PROCp1), 0) button2% = FN_button("Resultant", 110, 5, 80, 20, FN_setproc(PROCp2), 0) WindowWidth=480 : REM Scale 0-480 WindowHeight=240 : REM Scale 0-240 VDU 23,22,WindowWidth;WindowHeight;8,15,16,128 SYS "SetWindowText", @hwnd%, "Wave Incident on a Dielectric" OFF REPEAT WAIT 1 UNTIL FALSE DEF PROCp1 : kk=1 DEF PROCp2 : kk=2 ORIGIN 0, 240 b=PI/120: c=PI/60 n1=1: n2=2: a=120: r=a*(n1-n2)/(n1+n2): t=a+r : REM Amplitudes tt=TIME: del=1.5 * REFRESH OFF FOR i=0 TO 960 CLS: GCOL 0 LINE 0, 0, 960, 0 : LINE 480, -240, 480, 240 IF kk=1 THEN GCOL 9: MOVE 0, INT(a*SIN(i*b)) : REM Plot components FOR j=1 TO 240 DRAW 2*j, INT(a*SIN(i*b-j*n1*c)) NEXT j GCOL 6: MOVE 0, INT(r*SIN(i*b)) FOR j=1 TO 240 DRAW 2*j, INT(r*SIN(i*b+j*n1*c)) NEXT j ELSE GCOL 12: MOVE 0, INT((a+r)*SIN(i*b)) : REM Plot resultant FOR j=1 TO 240 DRAW 2*j, INT(a*SIN(i*b-j*n1*c)+r*SIN(i*b+j*n1*c)) NEXT j ENDIF GCOL 12: MOVE 480, INT(t*SIN(i*b)) : REM Plot transmitted wave FOR j=1 TO 240 DRAW 480+2*j, INT(t*SIN(i*b-j*n2*c)) NEXT j tt=tt+del: WHILE tt>TIME: ENDWHILE * REFRESH NEXT i * REFRESH ON ENDPROC