Procedure origami; CONST pageWidth=210; pageHeight=297; pageFoldY=148.5; pageFoldX=105; fDistance=10; aLinien=21; VAR p1X,p1Y,p2X,p2Y: REAL; nOvals: INTEGER; i: INTEGER; k: INTEGER; p3X: REAL; r1X,r1Y,r2X,r2Y: REAL; makeRandomDistance: BOOLEAN; secDistance: REAL; ovalRadius: REAL; BEGIN nOvals:= P_OVALS; ovalRadius:=P_RADIUS; makeRandomDistance:=true; {*blatt zeichnen*} FillFore(255,255,255); penFore(0,0,65535); rect(0,pageHeight,pageWidth,0); {*hauptfalte zeichnen*} penFore(65535,0,0); moveto(0,pageFoldY); lineto(pageWidth,pageFoldY); {*punkte oben links der hauptovale festlegen*} p1X:=(pageFoldX-ovalRadius*1.41421/2); p1Y:=(pageFoldY+ovalRadius); {*punkte unten rechts der hauptovale festlegen*} p2X:=(pageFoldX+ovalRadius*1.41421/2); p2Y:=(pageFoldY-ovalRadius); {*die hauptovale zeichnen*} oval(p1X,p1Y,p2X,p2Y); {*zeichnen der kleineren ovalen*} FOR k:=1 TO nOvals DO BEGIN {*abstand zufällig wählen*} IF (makerandomdistance=true) THEN BEGIN secDistance:=20+Random*20; END ELSE BEGIN secDistance:=20; END; {*punkt oben links der kl ovalen*} r1X:=pageFoldX-(ovalRadius-k*secDistance)*1.41421/2; r1Y:=pageFoldY+(ovalRadius-k*secDistance); {*punkt unten rechts der kl ovalen*} r2X:=pageFoldX+(ovalRadius-k*secDistance)*1.41421/2; r2Y:=pageFoldY-(ovalRadius-k*secDistance); {*kleine ovale zeichnen*} oval(r1X,r1Y,r2X,r2Y); END; {*zeichnen der schnittlinien*} FOR i:=2 TO aLinien-2 DO BEGIN {*ort auf der x-achse*} p3X:=i*fDistance; {*linien zeichnen*} penFore(0,0,65535); moveto(p3X,p2Y); lineto(p3X,p1Y); END; END; RUN(origami);