PROGRAM DRAWTRIANGLE (INPUT,OUTPUT,GRAPHIC); (* 12.10.1986 FLORIAN MATTHES *) (* DIESES PROGRAMM ZEICHNET AUF DEM GRAFIKBILDSCHIRM GE- *) (* SCHACHTELTE DREIECKE WAEHLBARER VERZERRUNG. DAS REKUR- *) (* SIVE KONSTRUKTIONSPRINZIP WIRD IN DER PROZEDUR TRIANGLE*) (* ERLAEUTERT. *) CONST XMAX = 319; YMAX = 199; TYPE POINT = RECORD X,Y : INTEGER; END; VAR T : INTEGER; A1,A2,A3: POINT; LOW,D : REAL; PROZENT : REAL; PROCEDURE TRIANGLE(N:INTEGER; A,B,C:POINT); (* ZEICHNE REKURSIV EIN ZERLEGTES DREIECK *) VAR AB,BC,CA: POINT; PROCEDURE MIDPOINT(VAR X,Y,Z: POINT); (* BERECHNE Z AUF DER VERBINDUNGSLINE VON X UND Y *) (* GEMAESS DER ZUFAELLIG GEWAEHLTEN VERZERRUNG V *) VAR V: REAL; BEGIN (* Z.X:= (X.X+Y.X) DIV 2; SO BERECHNET MAN DEN *) (* Z.Y:= (X.Y+Y.Y) DIV 2; MITTELPUNKT *) V:= LOW + D * RANDOM(0); Z.X:= X.X + INT((Y.X-X.X)*V); Z.Y:= X.Y + INT((Y.Y-X.Y)*V); END; (* MIDPOINT *) BEGIN IF N>1 THEN BEGIN (* BILDE DREIECK AUS *) MIDPOINT(A,B,AB); (* 4 KLEINEREN DREIECKEN *) MIDPOINT(B,C,BC); MIDPOINT(C,A,CA); TRIANGLE(N-1,A ,AB,CA); TRIANGLE(N-1,AB,B ,BC); TRIANGLE(N-1,CA,BC,C ); TRIANGLE(N-1,AB,BC,CA); END ELSE (* SONST VERBINDE ECKEN *) DRAW(1,A.X,A.Y,B.X,B.Y,C.X,C.Y,A.X,A.Y); END; (* TRIANGLE *) BEGIN COLOR(0,1); COLOR(1,2); COLOR(5,5); WRITE("WELCHE TIEFE? :5" #157); READLN(T); WRITE("WELCHE VERZERRUNG? (0-100%): 0" #157); READLN(PROZENT); LOW:= (100-PROZENT) / 200; (* 0 BIS 0.5 *) D := PROZENT / 100; A1.X:=0; A1.Y:= YMAX; A2.X:=XMAX DIV 2; A2.Y:= 0; A3.X:=XMAX; A3.Y:= YMAX; GRAPHIC(1,1); TRIANGLE(T,A1,A2,A3); REPEAT UNTIL KEYPRESSED; GRAPHIC(0); END.