MCVSM CAAD-†bung VectorScriptsZ)b+ì CAAD-†bunggZIn diesem Bereich bestimmen Sie, unter welchen Bedingungen das Objekt neu gezeichnet wird.  ¨  ¨D  ùùùùùùùùùùùùùùùùùùùùùùìììùùìììùùìììùùùùùùùùùùùùùùùùùùùùùùü@@@@C„C„C„@@@@üü@@@@C„C„C„@@@@ü Ú ' @ Y r‹¤½Öïfunktion Diagonale Diagonale DiagonaleSpitzSpitz Halbkreis Halbkreis k1richtungTRUE k2richtungTRUE breiteapprox20k1breite120k1tiefe50k1hohe120k2breite120k2tiefe120k2hohe40PROCEDURE faltkarte; CONST pageWidth=210; pageHeight=297; pageFoldY=148.5; rand=20; VAR k1breite:INTEGER; k1hohe:REAL; k1tiefe:REAL; k2breite:INTEGER; k2hohe:REAL; k2tiefe:REAL; breiteapprox:INTEGER; k1richtung:BOOLEAN; k2richtung:BOOLEAN; i:INTEGER; k1stbreite:REAL; k2stbreite:REAL; k1nstreifen:INTEGER; k2nstreifen:INTEGER; k1stufenwerte:DYNARRAY[] OF REAL; k2stufenwerte:DYNARRAY[] OF REAL; PROCEDURE berechneDiagonal(richtung:BOOLEAN; hohe:REAL; anzahl:INTEGER; VAR yWerte:DYNARRAY[] OF REAL); VAR i:INTEGER; BEGIN FOR i:=0 TO anzahl-1 DO BEGIN IF richtung=TRUE THEN yWerte[i]:=hohe/(anzahl)*(i+1) ELSE yWerte[i]:=hohe-hohe/(anzahl)*(i) END; END; PROCEDURE berechneSpitz(richtung:BOOLEAN; hohe:REAL; anzahl:INTEGER; VAR yWerte:DYNARRAY[] OF REAL); VAR i:INTEGER; spitz:INTEGER; dh:REAL; BEGIN spitz:=anzahl DIV 2 + 1; dh:=hohe/spitz; FOR i:=0 TO anzahl-1 DO BEGIN IF richtung=TRUE THEN IF i < spitz THEN yWerte[i]:=dh*(i+1) ELSE yWerte[i]:=hohe-dh*(i-spitz+1) ELSE IF i < spitz THEN yWerte[i]:=hohe-dh*(i) ELSE yWerte[i]:=dh*(i-spitz+2) END; END; PROCEDURE berechneKreis(richtung:BOOLEAN; hohe:REAL; anzahl:INTEGER; VAR yWerte:DYNARRAY[] OF REAL); VAR i:INTEGER; d:REAL; BEGIN d:=2/(anzahl+1); FOR i:=0 TO anzahl-1 DO BEGIN IF richtung=TRUE THEN BEGIN yWerte[i]:=sqrt(1-sqr(-1+(i+1)*d))*hohe; END ELSE BEGIN yWerte[i]:=hohe-sqrt(1-sqr(-1+(i+1)*d))*hohe; END; END; d:=yWerte[0]/2; IF richtung=TRUE THEN BEGIN d:=yWerte[0]/2; END ELSE BEGIN d:=-(hohe-yWerte[0])/2; END; FOR i:=0 TO anzahl-1 DO BEGIN yWerte[i]:=yWerte[i]-d; END; END; BEGIN k1breite:=pk1breite; k1hohe:=pk1hohe; k1tiefe:=pk1tiefe; k2breite:=pk2breite; k2hohe:=pk2hohe; k2tiefe:=pk2tiefe; breiteapprox:=pbreiteapprox; k1richtung:=pk1richtung; k2richtung:=pk2richtung; IF k1hohe < k2hohe THEN BEGIN message('falsch!'); END; {*breiten berechnen*} k1nstreifen:=k1breite DIV breiteapprox; k2nstreifen:=k2breite DIV breiteapprox; IF k1nstreifen MOD 2 = 0 THEN k1nstreifen:=k1nstreifen+1; IF k2nstreifen MOD 2 = 0 THEN k2nstreifen:=k2nstreifen+1; k1stbreite:=k1breite / k1nstreifen; k2stbreite:=k2breite / k2nstreifen; {*dina a4 blatt zeichnen*} penFore(0,0,65535); moveto(0,0); lineto(pageWidth,0); lineto(pageWidth,pageHeight); lineto(0,pageHeight); lineto(0,0); {*falt zeichnen*} penFore(65535,0,0); moveto(0,pageFoldY); lineto(rand, pageFoldY); moveto(pageWidth-rand,pageFoldY); lineto(pageWidth, pageFoldY); {*kšrper 1 zeichnen*} ALLOCATE k1stufenwerte[0..k1nstreifen-1]; IF pfunktion='Diagonale' THEN berechneDiagonal(k1richtung, (k1hohe-k2hohe),k1nstreifen, k1stufenwerte) ELSE IF pfunktion='Spitz' THEN berechneSpitz(k1richtung, (k1hohe-k2hohe),k1nstreifen, k1stufenwerte) ELSE berechneKreis(k1richtung, (k1hohe-k2hohe),k1nstreifen, k1stufenwerte); penFore(0,65535,0); FOR i:=0 TO k1nstreifen-1 DO BEGIN Rect(pageWidth-rand-k1breite+k1stbreite*i,pageFoldY-k1tiefe+k2hohe+k1stufenwerte[i], pageWidth-rand-k1breite+k1stbreite*(i+1),pageFoldY-k1tiefe+k2hohe+k1stufenwerte[i]+k1tiefe); {*moveto(pageWidth-rand-k1breite+k1stbreite*i,pageFoldY-k1tiefe+k2hohe+k1stufenwerte[i]+(k1hohe-k2hohe)*0.1); lineto(pageWidth-rand-k1breite+k1stbreite*(i+1),pageFoldY-k1tiefe+k2hohe+k1stufenwerte[i]+(k1hohe-k2hohe)*0.1);*} END; {*moveto(pageWidth-rand-k1breite, pageFoldY+k1hohe); lineto(pageWidth-rand, pageFoldY+k1hohe); moveto(pageWidth-rand-k1breite, pageFoldY+k1hohe-k1tiefe); lineto(pageWidth-rand, pageFoldY+k1hohe-k1tiefe);*} moveto(rand+k2breite, pageFoldY-k1tiefe); lineto(pageWidth-rand, pageFoldY-k1tiefe); moveto(pageWidth-rand-k1breite, pageFoldY-k1tiefe+k2hohe+k1stufenwerte[0]); lineto(pageWidth-rand-k1breite, pageFoldY+k2hohe); moveto(pageWidth-rand, pageFoldY-k1tiefe+k2hohe+k1stufenwerte[k1nstreifen-1]); lineto(pageWidth-rand, pageFoldY-k1tiefe); {*kšrper 2 zeichnen*} penFore(65535,65535,0); ALLOCATE k2stufenwerte[0..k2nstreifen-1]; IF pfunktion='Diagonale' THEN berechneDiagonal(k2richtung, (k2tiefe-k1tiefe),k2nstreifen, k2stufenwerte) ELSE IF pfunktion='Spitz' THEN berechneSpitz(k2richtung, (k2tiefe-k1tiefe),k2nstreifen, k2stufenwerte) ELSE berechneKreis(k2richtung, (k2tiefe-k1tiefe),k2nstreifen, k2stufenwerte); FOR i:=0 TO k2nstreifen-1 DO BEGIN Rect(rand+k2stbreite*i,pageFoldY+k2hohe-k1tiefe-k2stufenwerte[i],rand+k2stbreite*(i+1),pageFoldY+k2hohe-k1tiefe-k2stufenwerte[i]-k2hohe); {*Rect(pageWidth-rand-k1breite+k1stbreite*i,pageFoldY-k1tiefe+k2hohe+k1stufenwerte[i], pageWidth-rand-k1breite+k1stbreite*(i+1),pageFoldY-k1tiefe+k2hohe+k1stufenwerte[i]+k1tiefe);*} END; moveto(rand, pageFoldY+k2hohe); lineto(pageWidth-rand-k1breite, pageFoldY+k2hohe); moveto(pageWidth-rand-k1breite,pageFoldY+k2hohe-k1tiefe); lineto(rand+k2breite,pageFoldY+k2hohe-k1tiefe); {*moveto(rand, pageFoldY+k2hohe-k2tiefe); lineto(rand+k2breite, pageFoldY+k2hohe-k2tiefe); moveto(rand, pageFoldY-k2tiefe); lineto(rand+k2breite, pageFoldY-k2tiefe);*} moveto(rand, pageFoldY+k2hohe); lineto(rand, pageFoldY+k2hohe-k1tiefe-k2stufenwerte[0]); moveto(pageWidth-rand-k1breite, pageFoldY+k2hohe); lineto(pageWidth-rand-k1breite,pageFoldY+k2hohe-k1tiefe); moveto(rand+k2breite,pageFoldY+k2hohe-k1tiefe); lineto(rand+k2breite, pageFoldY+k2hohe-k1tiefe-k2stufenwerte[k2nstreifen-1]); moveto(10,10); TextFont(10); TextSize(18); CreateText('TeamMC'); END; RUN(faltkarte);FunktionKšrper1 FunktionsrichtungKšrper2 FunktionsrichtungStreifenbreiteKšrper1 Breite Kšrper1 Tiefe Kšrper1 HšheKšrper2 Breite Kšrper2 Tiefe Kšrper2 Hšhe