home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 September / Simtel20_Sept92.cdr / msdos / plot / splot57.arc / CURVEGEN.BAS < prev    next >
BASIC Source File  |  1989-08-15  |  3KB  |  73 lines

  1. 10 REM  PROGRAM CURVEGEN GENERATES VALUES OF A 3D CURVE.
  2. 20 REM  THE PROGRAM WRITES THE VALUES ALONG WITH PLOT COMMANDS TO A FILE
  3. 30 REM  NAMED CURVDATA.PLT; THE VALUES ARE THEN PLOTTED BY USING THE SHELL
  4. 40 REM  COMMAND TO RUN THE SPLOT PROGRAM.
  5. 50 REM
  6. 60 REM  COPYRIGHT 1988, 1989 BY WILLIAM G. HOOD
  7. 70 REM
  8. 80 REM  WARNING: DO NOT RENUMBER!
  9. 90 REM
  10. 100 CLS: KEY OFF
  11. 110 PRINT"This program plots a curve in three dimensions.  The curve is"
  12. 120 PRINT"defined parametrically by a subroutine which must follow the"
  13. 130 PRINT"main program.  The subroutine must set variables X, Y and Z"
  14. 140 PRINT"equal to functions of the parameter T."
  15. 150 PRINT
  16. 160 INPUT"Do you want to see current equations (N/Y)"; A$: A$=LEFT$(A$,1)
  17. 170 IF A$="Y" OR A$="y" THEN CLS: LIST 1000-1999: END
  18. 180 REM
  19. 190 OPEN "CURVDATA.PLT" FOR OUTPUT AS #2
  20. 200 PRINT: LINE INPUT"Title? "; TITLE$: PRINT#2,"TITLE "+TITLE$
  21. 205 PRINT: LINE INPUT"Z-Axis Label? "; LZ$: PRINT#2,"ZLABEL "+LZ$
  22. 210 LINE INPUT"X-Axis Label? ";LX$: PRINT#2,"XLABEL "+LX$
  23. 220 LINE INPUT"Y-Axis Label? ";LY$: PRINT#2,"YLABEL "+LY$
  24. 222 PRINT: INPUT"Log Z-Axis (N/Y)"; A$: A$=LEFT$(A$,1)
  25. 224 IF A$="Y" OR A$="y" THEN PRINT#2,"LOGZ"
  26. 230 INPUT"Log X-Axis (N/Y)"; A$: A$=LEFT$(A$,1)
  27. 240 IF A$="Y" OR A$="y" THEN PRINT#2,"LOGX"
  28. 250 INPUT"Log Y-Axis (N/Y)"; A$: A$=LEFT$(A$,1)
  29. 260 IF A$="Y" OR A$="y" THEN PRINT#2,"LOGY"
  30. 290 REM
  31. 350  PRINT
  32. 360  PRINT"Enter initial value, final value & step size of parameter ";
  33. 372  PRINT"separated by spaces"
  34. 390  INPUT V$: IF V$="" GOTO 470
  35. 400   GOTO 420
  36. 410    INPUT"Initial Value, Final Value, Step Size"; V$: IF V$="" GOTO 470
  37. 420   P=1: GOSUB 680: TI. = V: GOSUB 680: TF. = V: GOSUB 680: TS. = V
  38. 430   IF TS. <= 0 THEN PRINT"ERROR: INVALID STEP SIZE": GOTO 410
  39. 440   ND. = INT( (TF.-TI.)/TS. + 1.5 )
  40. 450   IF ND. < 2 THEN PRINT"ERROR: INVALID RANGE": GOTO 410
  41. 460   IF ND. > 1024 THEN PRINT"ERROR: TOO MANY POINTS - MAX IS 1024": GOTO 410
  42. 470  PRINT:PRINT"Calculating..."
  43. 480  PRINT#2,"READXYZ ";ND.
  44. 490  FOR I.=1 TO ND.
  45. 500   T = TI. + (I.-1)*TS.
  46. 510   GOSUB 1100
  47. 520   PRINT#2, X;" ";Y;" ";Z
  48. 530  NEXT I.
  49. 540 PRINT#2,"PLOT3D CURVE": PRINT#2,"KEYBOARD"
  50. 550 CLOSE#2
  51. 560 REM
  52. 570 PRINT:PRINT"Press the ENTER key to display the plot";
  53. 580 PRINT" - press the ESC key to clear the plot."
  54. 590 A$=INKEY$: IF A$<>"" GOTO 590
  55. 600 A$=INKEY$: IF A$="" GOTO 600
  56. 610 IF ASC(A$)<>13 GOTO 600
  57. 620 SHELL( "SPLOT CURVDATA.PLT" )
  58. 630 END
  59. 670 REM EXTRACTS V FROM V$ STARTING AT POSITION P
  60. 680 P2=LEN(V$)
  61. 690 IF MID$(V$,P,1)=" " AND P<=P2 THEN P=P+1: GOTO 690
  62. 700 P0=P: IF P0>P2 THEN V=0: RETURN
  63. 710 IF MID$(V$,P,1)<>" " AND P<=P2 THEN P=P+1: GOTO 710
  64. 720 V = VAL( MID$( V$, P0, P-P0 ) )
  65. 730 RETURN
  66. 1000 REM
  67. 1010 REM NOTE: To avoid conflict with main program variables,
  68. 1020 REM       do not use variable names that contain a period.
  69. 1030 REM
  70. 1100 REM Subroutine must set X=f1(T), Y=f2(T), Z=f3(T) after this line #
  71. 1110 X = T * SIN(T): Z = T * COS(T): Y = T
  72. 1190 RETURN
  73.