' gc1lib.bas - jackord@kw.igs.net - revised 28 Feb 08 - Liberty Basic v4.02 ' magnetic field lines about parallel wires carrying currents -I, 2I, and -I ' Initialize Window nomainwin WindowWidth=426 ' pixel scale 0-408 WindowHeight=374 ' pixel scale 0-336 UpperLeftX=100: UpperLeftY=50 button#1, "Plot", [plot], UL, 5, 5, 40, 18 open "Magnetic Field around Parallel Wires" for graphics_nsb as #1 #1 "trapclose [quit]" ' Initialize and Plot Equilateral Array dim p(4): dim q(4): dim m(4) d=1: pi=4*atn(1) p(1)=121: q(1)=216: p(2)=204: q(2)=72: p(3)=287: q(3)=216 m(1)=0-1: m(2)=2: m(3)=m(1) gosub [pin] [waitHere] wait [pin] ' Initialize Screen #1 "cls ; down ; backcolor pink" for i=1 to 3 step 2 #1 "place "; p(i); " "; q(i) #1 "circlefilled 12" #1 "place "; p(i)-5; " "; q(i)+5: #1 "\-I" next i #1 "backcolor lightgray" #1 "place "; p(2); " "; q(2) #1 "circlefilled 12" #1 "place "; p(2)-6; " "; q(2)+5: #1 "\2I" return [plot] ' Plot Fieldlines gosub [pin] #1 "color blue" for i=-15 to 11 x=204: y=170-6*i gosub [fdln] next i goto [waitHere] [quit] close#1 end [fdln] ' Fieldline Subroutine #1 "place "; x; " "; y z=x: dx=0: dy=0: gosub [mfld] dx=0-bx*d: dy=0-by*d: dxi=dx while (z-204)*dxi>=0 or (x-204)*dxi<0 scan: gosub [mfld] dx=0-bx*d: dy=0-by*d: z=x: x=x+dx: y=y+dy #1 "goto "; int(x+.5); " "; int(y+.5) wend return [mfld] ' 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 return