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
k2richtungTRUEbreiteapprox20k1breite120k1tiefe50k1hohe120k2breite120k2tiefe120k2hohe40PROCEDURE 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 TiefeKšrper1 HšheKšrper2 Breite
Kšrper2 TiefeKšrper2 Hšhe