ªªªªCUBUS ÿÿÿÿ PROGRAM KUBUS; (* nach NJ 5/83 S.6 *) VAR X1,Y1,IDATA,I,SX,SY,X,Y,Z,X1A,Y1A: INTEGER; D,SCALE,RHO,THETA,PHI,S1,C1,S2,C2: REAL; C: STRING[1]; BILD: ARRAY[0..50] OF INTEGER; BILDPUFFER: ARRAY[0..511] OF INTEGER; MIT_ANIMAT: BOOLEAN; PROCÔÿÿÿÿ EDURE CLEARBUFFER; PROCEDURE XCLEARB(W0: INTEGER); CODE $DD,$2A,$92,$0C,$DD,$66,$FF,$DD,$6E,$FE, $36,$20,$54,$5D,$13, 1,$FF, 3,$ED,$B0,$C9; BEGIN XCLEARB(ADDR(BILDPUFFER[0])); END; PROCEDURE COPYBUFFER; PROCEDURE XCOPY(WOHER: INTEGER); CODE $DD,$Iÿÿÿÿ 2A,$92,$0C,$DD,$66,$FF,$DD,$6E,$FE, $11,$0A,$08, 1, 0, 4,$ED,$B0,$C9; BEGIN XCOPY(ADDR(BILDPUFFER[0])); END; PROCEDURE ANIMAT(EIN: BOOLEAN); CONST PLOTADR=$1FFC; VAR A: INTEGER; BEGIN IF EIN THEN BEGIN A:=ADDR(BILDPUFFER[0]); MEM[PLOTAAÿÿÿÿ DR ]:=MEM[ADDR(A) ]; MEM[PLOTADR+1]:=MEM[ADDR(A)+1]; END ELSE BEGIN MEM[PLOTADR ]:=$0A; MEM[PLOTADR+1]:=$08; END; END; PROCEDURE LINE(X0,Y0,X1,Y1,Z1: INTEGER); VAR I,DX,DY,D,AX,AY,BX,BY: INTEGER; BEGIN DX:=X1-X0; DY:=Y1-Y0; BX:=0; AY:Yÿÿÿÿ =0; AX:=1; BY:=1; IF DX<0 THEN BEGIN AX:=-1; DX:=-DX END; IF DY<0 THEN BEGIN BY:=-1; DY:=-DY END; IF DXDX THEN BEGIN D:=D-DX; X0:=X0+BX; Y0:=Y0+BY; END; END; X1A:=X1; Y1A:=Y1; END; PROCEDURE PROJ(X,Y,Z: INTEGER; VAR SX,SY: INTEGER); VAR XE,YE,ZE: REAL; BEGIN XE:=-X*S1+Y*C1; YE:=-X*C1*C2-Y*S1*C2+Z*S2; lÿÿÿÿ ZE:=-X*S2*C1-Y*S2*S1-Z*C2+RHO; SX:=ROUND(D*XE/ZE)+48; SY:=31-ROUND(D*YE/ZE); SY:=(SY*11) DIV 16; END; PROCEDURE DATAREAD(VAR X,Y,Z: INTEGER); BEGIN X:=BILD[IDATA ]; Y:=BILD[IDATA+1]; Z:=BILD[IDATA+2]; IDATA:=IDATA+3; END; PROCEDURE RESTORE; BEG…ÿÿÿÿ IN IDATA:=0; END; BEGIN INIT BILD TO 1,1,1,1,-1,1,-1,-1,1,-1,1,1, 1,1,1,1,1,-1,1,-1,-1, -1,-1,-1,-1,1,-1,1,1,-1, 1,-1,1,1,-1,-1,-1,-1,1, -1,-1,-1,-1,1,1,-1,1,-1; RHO:=10.0; THETA:=0.0; D:=255; PHI:=1.3Šÿÿÿÿ ; WRITELN(CHR(12),' Mit Plotpuffer? (J) '); READ (C); WRITELN; MIT_ANIMAT:=C='J'; IF MIT_ANIMAT THEN ANIMAT(TRUE); REPEAT IF MIT_ANIMAT THEN CLEARBUFFER; S1:=SIN(THETA); C1:=COS(THETA); S2:=SIN(PHI); C2:=COS(PHI); RESTORE; DATAREAD(X,Y,Z); PRËÿÿÿÿ  OJ(X,Y,Z,X1A,Y1A); IF NOT MIT_ANIMAT THEN WRITE(CHR(12)); FOR I:=1 TO 11 DO BEGIN DATAREAD(X,Y,Z); PROJ(X,Y,Z,SX,SY); LINE(X1A,Y1A,SX,SY,1); END; FOR I:=1 TO 2 DO BEGIN DATAREAD(X,Y,Z); PROJ(X,Y,Z,X1A,Y1A); DATAREAD(X,Y,Z); PROJ(X,Yÿÿÿÿ ±»,Z,SX,SY); LINE(X1A,Y1A,SX,SY,1); END; THETA:=THETA+0.05; IF MIT_ANIMAT THEN COPYBUFFER ELSE FOR I:=1 TO 20000 DO; UNTIL KEYBOARD; IF MIT_ANIMAT THEN ANIMAT(FALSE); END. ý