home *** CD-ROM | disk | FTP | other *** search
/ Antennas / Antennas_CD-ROM_Walnut_Creek_September_1996.iso / public / penstate / woodls.bas < prev    next >
BASIC Source File  |  1996-06-30  |  5KB  |  142 lines

  1. 5 '/////////////// WOODLS //////////////
  2. 10 CLS:KEY OFF : ON ERROR GOTO 1700
  3. 20 REM  WOODWARD-LAWSON SAMPLING METHOD
  4. 30 REM     LINE SOURCE SYNTHESIS
  5. 40 REM            7/14/86
  6. 50 REM   AHMAD FAIZAL MOHD ZAIN
  7. 60 '
  8. 70 PI=3.1415926#
  9. 80 YMAX=0:YMIN=0
  10. 90 INPUT"LINE SOURCE LENGTH ";L
  11. 100 NMAX=L
  12. 110 DIM W(2*NMAX+1),A(2*NMAX+1),ANG(2*NMAX+1),F(200)
  13. 120 DIM Y(2000),I(2000),PHI(500)
  14. 130 CLS:PRINT"Sample point","  w(n)","angle(N)","desired"
  15. 140 FOR N=-NMAX TO NMAX
  16. 150   I=N+NMAX
  17. 160   W(I)=N/L
  18. 170   X=W(I)
  19. 180   IF X*X=1 AND X>0 THEN ANG(I)=0:GOTO 210
  20. 190   IF X*X=1 AND X<0 THEN ANG(I)=-180:GOTO 210
  21. 200   ACOS=1.570796-ATN(X/SQR(1-X*X)):ANG(I)=180*ACOS/PI
  22. 210  PRINT I,:PRINT USING "##.##       ####.##  ";W(I);ANG(I),:INPUT"       ";A(I)
  23. 220 NEXT N
  24. 230 '
  25. 240 GOSUB 780
  26. 250 CLS:GOSUB 1160
  27. 260 '
  28. 270 FOR THETA=0 TO 180
  29. 280 W=COS(THETA*PI/180)
  30. 290 F(THETA)=0
  31. 300 FOR N=-NMAX TO NMAX
  32. 310   A=PI*L*(W-W(N+NMAX))
  33. 320   IF A=0 THEN F(THETA)=F(THETA)+A(N+NMAX):GOTO 340
  34. 330   F(THETA)=F(THETA)+A(N+NMAX)*SIN(A)/A
  35. 340 NEXT N
  36. 350  Y(THETA)=F(THETA)
  37. 360  IF Y(THETA)>YMAX THEN YMAX=Y(THETA)
  38. 370  IF Y(THETA)<YMIN THEN YMIN=Y(THETA)
  39. 380 NEXT THETA
  40. 390 '
  41. 395 KK=1
  42. 400 GOSUB 850        'SET UP SCREEN
  43. 410 GOSUB 930        'PLOT PATTERN
  44. 420 GOSUB 1150
  45. 425 KK=0
  46. 430 '
  47. 440 '     TO CALCULATE CURRENTS
  48. 450 '
  49. 460 I=0
  50. 470 YMAX=0:YMIN=0
  51. 480 PMAX=0:PMIN=0
  52. 490 FOR S=-L/2 TO L/2 STEP L/100
  53. 500 I=I+1
  54. 510   CR=0:CI=0
  55. 520   FOR N=-NMAX TO NMAX
  56. 530     A=2*PI*W(N+NMAX)*S
  57. 540     CR=CR+A(N+NMAX)*COS(A)
  58. 550     CI=CI+A(N+NMAX)*SIN(A)
  59. 560   NEXT N
  60. 570 CR=CR/L:CI=CI/L
  61. 580 I(I)=SQR(CR*CR+CI*CI)
  62. 590 IF CR=0 AND CI>0 THEN PHI(I)=90:GOTO 630
  63. 600 IF CR=0 AND CI<0 THEN PHI(I)=270:GOTO 630
  64. 610 IF CR=0 AND CI=0 THEN PHI(I)=0:GOTO 630
  65. 620 PHI=ATN(CI/CR):PHI(I)=PHI*180/PI
  66. 630 Y(I)=I(I)
  67. 640 IF Y(I)>YMAX THEN YMAX=Y(I)
  68. 650 IF Y(I)<YMIN THEN YMIN=Y(I)
  69. 660 IF PHI(I)>PMAX THEN PMAX=PHI(I)
  70. 670 IF PHI(I)<PMIN THEN PMIN=PHI(I)
  71. 680 NEXT S
  72. 690 '
  73. 693 GOSUB 850
  74. 695 GOSUB 1040
  75. 700 GOSUB 1180
  76. 710 '
  77. 720 END
  78. 730 INPUT"DO YOU WANT TO MAKE ANY CHANGES";AN$
  79. 740 IF AN$="N" OR AN$="n" THEN RETURN
  80. 750 INPUT"TYPE SAMPLING POINT TO CHANGE ";Q
  81. 760 PRINT Q,W(Q),ANG(Q),A(Q),:INPUT A(Q)
  82. 770 '
  83. 780 CLS:PRINT"Sample point","  w(n)","angle(N)","desired"
  84. 790 FOR N=-NMAX TO NMAX:I=N+NMAX
  85. 800  PRINT I,:PRINT USING "##.##       ####.##  ";W(I);ANG(I),:PRINT,A(I)
  86. 810 NEXT N
  87. 820 PRINT
  88. 830 GOSUB 730
  89. 840 RETURN
  90. 850 '      Set up Screen for plotting
  91. 860 SCREEN 2:CLS
  92. 870 FOR K=7 TO 67 STEP 10:LOCATE 20,K:PRINT"+";:NEXT K
  93. 875 IF KK=1 GOTO 890
  94. 880 FOR K=4 TO 20 STEP 4:LOCATE K,67:PRINT"-":NEXT K
  95. 890 VIEW (52,28)-(530,154),,1
  96. 900 LINE (239,0)-(239,154)
  97. 910 RETURN
  98. 920 '
  99. 930 PSET (0,Y(0))
  100. 940 WINDOW (0,YMIN)-(180,YMAX)
  101. 945 LINE (0,0)-(180,0),,,&HF0F0
  102. 946 PRESET (0,1)
  103. 947 LINE (0,1)-(180,1),,,&HF0F0
  104. 949 PRESET (0,Y(0))
  105. 950 FOR X=0 TO 180
  106. 960   LINE -(X,Y(X))
  107. 970 NEXT X
  108. 980 LOCATE 3,20:PRINT"MAGNITUDE OF SYNTHESISED PATTERN"
  109. 1000 LOCATE 21,6:PRINT"180":LOCATE 21,37:PRINT"90":LOCATE 21,67:PRINT"0"
  110. 1010 RETURN
  111. 1020 '
  112. 1030 '     plot current distribution
  113. 1040 LOCATE 3,20:PRINT"MAGNITUDE OF CURRENT DISTRIBUTION"
  114. 1050 '
  115. 1060 WINDOW (1,YMIN)-(I,YMAX)
  116. 1070 '
  117. 1080 PSET (1,Y(1))
  118. 1090 FOR X=1 TO I
  119. 1100   LINE -(X,Y(X))
  120. 1110 NEXT X
  121. 1120 LOCATE 21,6:PRINT-L/2:LOCATE 21,37:PRINT"0":LOCATE 21,66:PRINT L/2
  122. 1130 FOR K=4 TO 20 STEP 4:LOCATE K,68:PRINT(20-K)/16:NEXT K
  123. 1140 RETURN
  124. 1150 LOCATE 24,1:PRINT"TYPE <RETURN> TO CONTINUE...";:INPUT W:SCREEN 0,0
  125. 1160 PRINT"I'm doing some calculation.  Please wait..."
  126. 1170 RETURN
  127. 1180 T$="DO YOU WANT TO RUN THIS PROGRAM AGAIN (Y/N)? ":LC=23:GOSUB 1240
  128. 1190 AN$=INKEY$
  129. 1200 IF AN$="Y" OR AN$="y" THEN RUN
  130. 1210 IF AN$="N" OR AN$="n" THEN END
  131. 1220 GOTO 1180
  132. 1230 :
  133. 1240 LOCATE LC,(80-LEN(T$))/2+1:PRINT T$:RETURN    'SUBROUTINE TO CENTRE TEXT
  134. 1500 SCREEN 0,0,0:SOUND 1510,10:COLOR 7,0:LOCATE 25,10:PRINT "Key: Esc to End or `R' to Run Again or `S' to Return Start";CHR$(29);:COLOR 15,0:LOCATE 25,15:PRINT "Esc";:LOCATE 25,30:PRINT "R";:LOCATE 25,50:PRINT "S";CHR$(29);:COLOR 7,0
  135. 1510 E$=INKEY$:IF E$="" THEN 1510 ELSE IF E$=CHR$(27) THEN CLS:END ELSE IF E$="R" OR E$="r" THEN RUN ELSE IF E$="S" OR E$="s" THEN RUN "START
  136. 1520 GOTO 1510
  137. 1600 '//////////////// Routine to Draw a Box //////////////////
  138. 1610 LOCATE Y1,X1+1:PRINT STRING$(X2-X1-1,"─");:LOCATE Y1,X1:PRINT "┌";:LOCATE Y1,X2:PRINT "╖";:FOR I= Y1+1 TO Y2-1:LOCATE I,X1:PRINT "│";:LOCATE I,X2:PRINT "║";:NEXT:LOCATE Y2,X1:PRINT "╘";:LOCATE Y2,X1+1
  139. 1620 PRINT STRING$(X2-X1-1,"═");:LOCATE Y2,X2:PRINT "╝";:RETURN
  140. 1700 SCREEN 0,0,0:COLOR 31,1:LOCATE 24,1:PRINT "Fault Detected";CHR$(29);:COLOR 7,0
  141. 1710 RESUME 1500
  142.