1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52:
| {$R+,G+,Q+} PROGRAM VIER_ECK_GRAFIK; USES CRT,GRAPH,GRINI; CONST MAX=20;ESC=#27; VAR E,K,J,L:WORD; ALTRADIUS,RADIUS:INTEGER; ALFA,V,ZUWACHS:REAL; PUNKTE:ARRAY[1..MAX]OF POINTTYPE; TASTE:CHAR;
FUNCTION IM_FENSTER(K:BYTE):BOOLEAN; BEGIN IM_FENSTER:=(PUNKTE[K].X>10) AND (PUNKTE[K].X<MAXX-10) AND (PUNKTE[K].Y>10) AND (PUNKTE[K].Y<MAXY-10) END;
BEGIN CLRSCR;RANDOMIZE;GRAPHEIN(0,0,'C:\TP7\BGI'); REPEAT E:=RANDOM(MAX-4)+4;ZUWACHS:=360/E;ALFA:=0; FOR K:=1 TO E DO BEGIN RADIUS:=MAXY DIV 4; REPEAT PUNKTE[K].X:=ROUND(RADIUS*COS(ALFA*PI/180))+MAXX DIV 2; PUNKTE[K].Y:=ROUND(RADIUS*SIN(ALFA*PI/180))+MAXY DIV 2; IF IM_FENSTER(K) THEN ALTRADIUS:=RADIUS; RADIUS:=RADIUS+RANDOM(60); UNTIL NOT IM_FENSTER(K); RADIUS:=ALTRADIUS; PUNKTE[K].X:=ROUND(RADIUS*COS(ALFA*PI/180))+MAXX DIV 2; PUNKTE[K].Y:=ROUND(RADIUS*SIN(ALFA*PI/180))+MAXY DIV 2; ALFA:=ALFA+ZUWACHS END; CLEARDEVICE;J:=RANDOM(25*E)+20*E; V:=RANDOM; PUNKTE[E+1].X:=PUNKTE[1].X;PUNKTE[E+1].Y:=PUNKTE[1].Y; SETCOLOR(RANDOM(15)+1); DRAWPOLY(E+1,PUNKTE);TASTE:=READKEY; FOR K:=1 TO J DO BEGIN FOR L:=1 TO E DO BEGIN PUNKTE[L].X:=ROUND((1-V)*PUNKTE[L].X+V*PUNKTE[L+1].X); PUNKTE[L].Y:=ROUND((1-V)*PUNKTE[L].Y+V*PUNKTE[L+1].Y) END; PUNKTE[E+1].X:=PUNKTE[1].X; PUNKTE[E+1].Y:=PUNKTE[1].Y; DRAWPOLY(E+1,PUNKTE); END; DELAY(1000);IF KEYPRESSED THEN TASTE:=READKEY UNTIL TASTE=ESC END. |