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