home *** CD-ROM | disk | FTP | other *** search
- 10 ' **********************************************
- 20 ' * PCGRAF - Easy 3-D Graphics on the IBM PC *
- 30 ' * by *
- 40 ' * Henning Mittelbach *
- 50 ' * Copyright 1985, for private non-commercial *
- 60 ' * use only. *
- 70 ' **********************************************
- 80 CLS: SCREEN 1
- 90 DIM H (279)
- 100 X0=110
- 110 Y0=180
- 120 PHI=.5
- 130 PSI=.4
- 140 XL= 0
- 150 XR= 170
- 160 YL=0
- 170 YR=100
- 180 D=5
- 198 ' * FUNCTION TO BE PLOTTED *
- 199 '
- 200 DEF FN Y(X) = SIN (Y/F) * (X-Y) * (X-Y)/150
- 210 F=10
- 240 ' * ABBREVIATIONS AND CUTTING THE TOP *
- 250 CF= COS (PHI) : SF=SIN(PHI) : CP= COS (PSI) : SP= SIN(PSI)
- 260 H=Y0 - XR * SF -YR * SP - 2
- 270 INPUT "Do you desire cross-hatching? (Y/N):",OPT$
- 280 IF OPT$="Y" OR OPT$="y" THEN CH=2 ELSE CH=1
- 300 INPUT "Do you wish to view the axes? (Y/N):",AX$
- 310 CLS: IF AX$ = "Y" OR AX$ = "y" THEN 320 ELSE 340
- 320 LINE (X0 + XL * CF, Y0 - XL * SF) -(X0 + XR * CF, Y0 - XR * SF)
- 330 LINE (X0 - YL * CP, Y0 - YL * SP) -(X0 - YR * CP, Y0 - YR * SP )
- 340 LINE (0,0) - (279,189),,B
- 350 '
- 398 ' R=1: Y-COORD. LINES
- 399 ' R=2: X-COORD. LINES
- 400 FOR R = 1 TO CH
- 410 ' * SETTING MASK ON LOWER BORDER OF WINDOW *
- 420 FOR I = 0 TO 279: H(I) = 189: NEXT I
- 430 ON R GOSUB 1000, 2000
- 440 NEXT R
- 499 ' * GRAPHIC IS FINISHED *
- 500 BEEP
- 510 LINE (0,0) - (279,189),,B
- 520 A$=INKEY$: IF A$="" THEN 520
- 600 END
- 610 ' * END OF PROGRAM *
- 1000 ' * Y-COORD. LINES FOR X = CONST. *
- 1010 Y = YL: ' * FRONT MASK SETTING *
- 1020 FOR X = XL TO XR
- 1030 XB = INT (X0 + X * CF - Y * CP + .5)
- 1040 Z = FN Y(X) : IF Z > H THEN Z = H
- 1050 YB = INT (Y0 - X * SF - Y * SP - Z + .5)
- 1060 IF YB < H(XB) THEN H(XB) = YB
- 1070 NEXT X
- 1090 ' * ADAPTING THE MASK PER LINE *
- 1100 FOR X = XL TO XR STEP D
- 1110 U = X0 + X * CF : V = Y0 - X * SF
- 1120 FOR Y = YL TO YR
- 1130 XB = INT (U - Y * CP + .5)
- 1140 Z = FN Y(X) : IF Z > H THEN Z = H
- 1150 YB = INT (V - Y * SP - Z + .5)
- 1160 IF YB < H(XB) THEN H(XB) = YB
- 1170 NEXT Y
- 1190 ' * PLOTTING THE MASK *
- 1200 FOR K = INT (U - YR * CP + .5) TO INT (U - YL * CP + .5) - 1
- 1210 LINE (K,H(K)) - (K + 1,H(K+1))
- 1220 NEXT K
- 1230 NEXT X
- 1240 RETURN
- 2000 ' * X-COORD. LINES FOR Y = CONST. *
- 2010 X = XL: ' * FRONT MASK SETTING *
- 2020 FOR Y = YL TO YR
- 2030 XB = INT (X0 + X * CF - Y * CP + .5)
- 2040 Z = FN Y(X) : IF Z > H THEN Z = H
- 2050 YB = INT (Y0 - X * SF - Y * SP - Z + .5)
- 2060 IF YB < H(XB) THEN H(XB) = YB
- 2070 NEXT Y
- 2090 ' * ADAPTING THE MASK PER LINE *
- 2100 FOR Y = YL TO YR STEP D
- 2110 U = X0 - Y * CP : V = Y0 - Y * SP
- 2120 FOR X = XL TO XR
- 2130 XB = INT (U + X * CF + .5)
- 2140 Z = FN Y(X) : IF Z > H THEN Z = H
- 2150 YB = INT (V - X * SF - Z + .5)
- 2160 IF YB < H(XB) THEN H(XB) = YB
- 2170 NEXT X
- 2190 ' * PLOTTING THE MASK *
- 2200 FOR K = INT (U + XL * CF + .5) TO INT (U + XR * CF) - 1
- 2210 LINE (K,H(K)) - (K + 1,H(K+1))
- 2220 NEXT K
- 2230 NEXT Y
- 2240 RETURN