home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 1 / HamRadio.cdr / tech / david4 / vector.bas < prev    next >
BASIC Source File  |  1987-01-24  |  6KB  |  205 lines

  1. 10 '***********************
  2. 20 '**  VECTOR ANALYSIS  **
  3. 30 '***********************
  4. 40 '
  5. 50 CLEAR
  6. 60 SCREEN 0,0,0
  7. 70 WIDTH 80
  8. 80 KEY OFF
  9. 90 CLS
  10. 100 '
  11. 110 DEF FNRTD(RADIANS)=180*RADIANS/3.141593  '  Converts radians to degrees
  12. 120 DEF FNDTR(DEGREES)=3.141593*DEGREES/180  '  Converts degrees to radians
  13. 130 '
  14. 140 '***********************
  15. 150 '**  Menu generation  **
  16. 160 '***********************
  17. 170 PRINT TAB(32)"VECTOR ANALYSIS"
  18. 180 PRINT
  19. 190 PRINT "A. Input vector V1 from keyboard.";
  20. 200 PRINT TAB(40)"L. Scalar multiplication of V1."
  21. 210 PRINT "B. Input vector V2 from keyboard.";
  22. 220 PRINT TAB(40)"M. Cartesian to spherical conversion."
  23. 230 PRINT "C. Input vector V3 from keyboard.";
  24. 240 PRINT TAB(40)"N. Spherical to cartesian conversion."
  25. 250 PRINT "D. Input vector V1 from result VR.";
  26. 260 PRINT TAB(40)"O. Cartesian to cylindrical conversion."
  27. 270 PRINT "E. Input vector V2 from result VR.";
  28. 280 PRINT TAB(40)"P. Cylindrical to cartesian conversion."
  29. 290 PRINT "F. Input vector V3 from result VR.";
  30. 300 PRINT TAB(40)"Q. V1 + V2."
  31. 310 PRINT "G. Swap values for vectors V1 and V2.";
  32. 320 PRINT TAB(40)"R. V1 - V2."
  33. 330 PRINT "H. Swap values for vectors V2 and V3.";
  34. 340 PRINT TAB(40)"S. Cross product of V1 and V2."
  35. 350 PRINT "I. Magnitude of V1.";
  36. 360 PRINT TAB(40)"T. Dot product of V1 and V2."
  37. 370 PRINT "J. Unit vector in direction of V1.";
  38. 380 PRINT TAB(40)"U. Angle between V1 and V2 (degrees)."
  39. 390 PRINT "K. Scalar triple product (V1*V2xV3).";
  40. 400 PRINT TAB(40)"V. Erase screen and redraw the menu."
  41. 410 PRINT STRING$(80,240);
  42. 420 PRINT
  43. 430 '
  44. 440 '*******************************************
  45. 450 '**  Numerical data and prompt to screen  **
  46. 460 '*******************************************
  47. 470 LOCATE 16,1
  48. 480 PRINT "V1 = ";I1 J1 K1 TAB(80)
  49. 490 PRINT "V2 = " I2 J2 K2 TAB(80)
  50. 500 PRINT "V3 = " I3 J3 K3 TAB(80)
  51. 510 LOCATE 20,1
  52. 520 PRINT "VR = " IR JR KR TAB(80)
  53. 530 GOSUB 2010
  54. 540 LOCATE 23,1
  55. 550 IF MAG THEN PRINT "Magnitude of V1 = ";MAG : MAG=0
  56. 560 IF STPF THEN PRINT "Scalar triple product = ";STP : STPF=0
  57. 570 IF DOTF THEN PRINT "Dot product = ";DOT : DOTF=0
  58. 580 IF ANF THEN PRINT "Angle V1 to V2 = ";ANG;CHR$(248) : ANF=0
  59. 590 IF CSF THEN PRINT "VR is in spherical notation (Rho, Theta, Phi) ";
  60. 600 IF CSF THEN PRINT "with the angles in degrees." : CSF=0
  61. 610 IF SCF THEN PRINT "VR is in cartesian notation (X,Y,Z) "; : SCF=0
  62. 620 IF CYF THEN PRINT "VR is in cylindrical notation (Rho, Theta, Z) ";
  63. 630 IF CYF THEN PRINT "with Theta in degrees." : CYF=0
  64. 640 IF YCF THEN PRINT "VR is in cartesian notation (X,Y,Z) "; : YCF=0
  65. 650 LOCATE 21,1
  66. 660 PRINT "SELECT FUNCTION BY LETTER ";
  67. 670 COLOR 23,0
  68. 680 PRINT CHR$(219);
  69. 690 COLOR 7,0
  70. 700 '
  71. 710 '**********************************************
  72. 720 '**  Menu selection and functions performed  **
  73. 730 '**********************************************
  74. 740 K$=INKEY$
  75. 750 IF K$ = "" THEN 740
  76. 760 IF K$ >= "a" AND K$ <= "z" THEN K$=CHR$(ASC(K$)-32) '    Capitalize K$
  77. 770 '
  78. 780 IF K$ <> "A" THEN 820
  79. 790 GOSUB 2010
  80. 800 INPUT "Enter values for V1 (i,j,k) ";I1,J1,K1
  81. 810 '
  82. 820 IF K$ <> "B" THEN 860
  83. 830 GOSUB 2010
  84. 840 INPUT "Enter values for V2 (i,j,k) ";I2,J2,K2
  85. 850 '
  86. 860 IF K$ <> "C" THEN 900
  87. 870 GOSUB 2010
  88. 880 INPUT "Enter values for V3 (i,j,k) ";I3,J3,K3
  89. 890 '
  90. 900 IF K$ <> "D" THEN 930
  91. 910 I1=IR : J1=JR : K1=KR
  92. 920 '
  93. 930 IF K$ <> "E" THEN 960
  94. 940 I2=IR : J2=JR : K2=KR
  95. 950 '
  96. 960 IF K$ <> "F" THEN 990
  97. 970 I3=IR : J3=JR : K3=KR
  98. 980 '
  99. 990 IF K$ <> "G" THEN 1060
  100. 1000 I1=I1 : J1=J1 : K1=K1
  101. 1010 I2=I2 : J2=J2 : K2=K2
  102. 1020 SWAP I1,I2
  103. 1030 SWAP J1,J2
  104. 1040 SWAP K1,K2
  105. 1050 '
  106. 1060 IF K$ <> "H" THEN 1130
  107. 1070 I2=I2 : J2=J2 : K2=K2
  108. 1080 I3=I3 : J3=J3 : K3=K3
  109. 1090 SWAP I2,I3
  110. 1100 SWAP J2,J3
  111. 1110 SWAP K2,K3
  112. 1120 '
  113. 1130 IF K$ <> "I" THEN 1160
  114. 1140 MAG=SQR(I1*I1+J1*J1+K1*K1)
  115. 1150 '
  116. 1160 IF K$ <> "J" THEN 1220
  117. 1170 MAGN=SQR(I1*I1+J1*J1+K1*K1)
  118. 1180 IR=I1/MAGN
  119. 1190 JR=J1/MAGN
  120. 1200 KR=K1/MAGN
  121. 1210 '
  122. 1220 IF K$ <> "K" THEN 1260
  123. 1230 STP=I1*J2*K3+J1*K2*I3+K1*I2*J3-K1*J2*I3-J1*I2*K3-I1*K2*J3
  124. 1240 STPF = 1
  125. 1250 '
  126. 1260 IF K$ <> "L" THEN 1320
  127. 1270 GOSUB 2010 : INPUT "Scalar value for multiplication ";SCA
  128. 1280 IR=I1*SCA
  129. 1290 JR=J1*SCA
  130. 1300 KR=K1*SCA
  131. 1310 '
  132. 1320 IF K$ <> "M" THEN 1410
  133. 1330 IR=SQR(I1*I1+J1*J1+K1*K1)
  134. 1340 IF I1 THEN JR=ATN(J1/I1) ELSE JR=1.570796*SGN(J1)
  135. 1350 IF I1 < 0 THEN JR=JR+((J1<0)-(J1>=0))*3.141593
  136. 1360 KR=K1/SQR(I1*I1+J1*J1+K1*K1) : CSF=1
  137. 1370 IF KR*KR < 1 THEN KR=1.570796-ATN(KR/SQR(1-KR*KR)) ELSE KR=1.570796
  138. 1380 JR=FNRTD(JR)
  139. 1390 KR=FNRTD(KR)
  140. 1400 '
  141. 1410 IF K$ <> "N" THEN 1470
  142. 1420 IR=I1*COS(FNDTR(J1))*SIN(FNDTR(K1))
  143. 1430 JR=I1*SIN(FNDTR(J1))*SIN(FNDTR(K1))
  144. 1440 KR=I1*COS(FNDTR(K1))
  145. 1450 SCF = 1
  146. 1460 '
  147. 1470 IF K$ <> "O" THEN 1550
  148. 1480 IR=SQR(I1*I1+J1*J1)
  149. 1490 IF I1 THEN JR=ATN(J1/I1) ELSE JR=1.570796*SGN(J1)
  150. 1500 IF I1 < 0 THEN JR=JR+((J1<0)-(J1>=0))*3.141593
  151. 1510 JR=FNRTD(JR)
  152. 1520 KR=K1
  153. 1530 CYF=1
  154. 1540 '
  155. 1550 IF K$ <> "P" THEN 1610
  156. 1560 IR=I1*COS(FNDTR(J1))
  157. 1570 JR=I1*SIN(FNDTR(J1))
  158. 1580 KR=K1
  159. 1590 YCF = 1
  160. 1600 '
  161. 1610 IF K$ <> "Q" THEN 1660
  162. 1620 IR=I1+I2
  163. 1630 JR=J1+J2
  164. 1640 KR=K1+K2
  165. 1650 '
  166. 1660 IF K$ <> "R" THEN 1710
  167. 1670 IR=I1-I2
  168. 1680 JR=J1-J2
  169. 1690 KR=K1-K2
  170. 1700 '
  171. 1710 IF K$ <> "S" THEN 1760
  172. 1720 IR=J1*K2-K1*J2
  173. 1730 JR=K1*I2-I1*K2
  174. 1740 KR=I1*J2-J1*I2
  175. 1750 '
  176. 1760 IF K$ <> "T" THEN 1800
  177. 1770 DOT=I1*I2+J1*J2+K1*K2
  178. 1780 DOTF=1
  179. 1790 '
  180. 1800 IF K$ <> "U" THEN 1920
  181. 1810 NUMER1=I1*I2+J1*J2+K1*K2
  182. 1820 DENOM1=SQR(I1*I1+J1*J1+K1*K1)
  183. 1830 IF DENOM1 = 0 THEN 1920
  184. 1840 DENOM2=SQR(I2*I2+J2*J2+K2*K2)
  185. 1850 IF DENOM2 = 0 THEN 1920
  186. 1860 TERM=NUMER1/DENOM1/DENOM2
  187. 1870 IF TERM*TERM >= 1 THEN 1920
  188. 1880 RAD=1.570796-ATN(TERM/SQR(1-TERM*TERM))
  189. 1890 ANG=RAD*180/3.141593
  190. 1900 ANF = 1
  191. 1910 '
  192. 1920 IF K$ <> "V" THEN 1960
  193. 1930 CLS
  194. 1940 GOTO 140
  195. 1950 '
  196. 1960 GOTO 470           ' End of the menu function selection
  197. 1970 '
  198. 1980 '********************************************
  199. 1990 '**  Subroutine to clear the message line  **
  200. 2000 '********************************************
  201. 2010 LOCATE 21,1
  202. 2020 PRINT SPACE$(239);
  203. 2030 LOCATE 21,1
  204. 2040 RETURN
  205.