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 FNY (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 = FNY(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 = FNY(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 = FNY(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 = FNY(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
-
-