REM gc1bbc.bas - jackord@kw.igs.net - revised 27 Feb 08 - BBC BASIC (RTR) REM magnetic field lines about parallel wires carrying currents -I, 2I, and -I REM Use 64-bit floats *FLOAT 64 REM Install libraries INSTALL @lib$+"WINLIB5" REM Initialize Window WindowWidth=408 : REM pixel scale 0-408 WindowHeight=336 : REM pixel scale 0-336 VDU 23,22,WindowWidth;WindowHeight;8,15,16,128 button% = FN_button("Plot", 5, 5, 40, 18, FN_setproc(PROCplot), 0) SYS "SetWindowText", @hwnd%, "Magnetic Field around Parallel Wires" REM Initialize and Plot Equilateral Array DIM p(4): DIM q(4): DIM m(4) d=1 p(1)=121: q(1)=120: p(2)=204: q(2)=264: p(3)=287: q(3)=120 m(1)=0-1: m(2)=2: m(3)=m(1) PROCpin REPEAT WAIT 1 UNTIL FALSE DEF PROCpin : REM Initialize Screen CLS FOR i=1 TO 3 STEP 2 GCOL 0 : CIRCLE p(i)*2, q(i)*2, 24 GCOL 13 : FILL p(i)*2, q(i)*2 GCOL 0 : VDU 5 : MOVE p(i)*2-16, q(i)*2+16 : PRINT "-I"; NEXT i GCOL 0 : CIRCLE p(2)*2, q(2)*2, 24 GCOL 7 : FILL p(2)*2, q(2)*2 GCOL 0 : VDU 5 : MOVE p(2)*2-14, q(2)*2+16 : PRINT "2I"; ENDPROC DEF PROCplot : REM Plot Fieldlines PROCpin GCOL 12 FOR i=-15 TO 11 x=204: y=166+6*i PROCfdln NEXT i ENDPROC DEF PROCfdln : REM Fieldline Subroutine MOVE x*2, y*2 z=x: dx=0: dy=0: PROCmfld dx=0-bx*d: dy=0-by*d: dxi=dx WHILE (z-204)*dxi>=0 OR (x-204)*dxi<0 PROCmfld dx=0-bx*d: dy=0-by*d: z=x: x=x+dx: y=y+dy DRAW (x+.5)*2, (y+.5)*2 ENDWHILE ENDPROC DEF PROCmfld : REM Field Subroutine xx=x+dx/2: yy=y+dy/2: bx=0: by=0 FOR k=1 TO 3 r2=(xx-p(k))*(xx-p(k))+(yy-q(k))*(yy-q(k)) bx=bx+m(k)*(q(k)-yy)/r2: by=by+m(k)*(xx-p(k))/r2 NEXT k b=(bx*bx+by*by)^.5: bx=bx/b: by=by/b ENDPROC