home *** CD-ROM | disk | FTP | other *** search
- (*-------------------------------------------------------------------------*)
- (* TRANSDEM.PAS *)
- (* Demonstration der Transformationen von graphischen Objekten: *)
- (*-------------------------------------------------------------------------*)
-
- PROGRAM TransDemo (Input,Output);
-
- CONST
- (*$I GRAFCONS.PAS *)
-
- TYPE
- (*$I GRAFTYPE.PAS *)
-
- VAR
- (*$I GRAFVAR.PAS *)
- Handle : WinNrBereich;
- Objekt, AltObjekt : LinienObjekt;
- TransMat, a, b, res: tMatrix;
- i : INTEGER;
-
- (*$I GRAPH.P <-- Wird fuer Turbo Pascal auf MS-DOS benoetigt. *)
- (*$I GRAFSYS.PAS *)
- (*$I INTDDA.PAS *)
- (*$I LINE.PAS *)
- (*$I WINSYS.PAS *)
- (*$I WINGRAF.PAS *)
- (*$I CLIPOINT.PAS *)
- (*$I CLIPLINE.PAS *)
- (*$I TRANSMAT.PAS *)
- (*$I TRANS2D.PAS *)
- (*$I LINEOBJ.PAS *)
-
- BEGIN
- Enter_Graphic;
- InitWindows;
-
- (* Window & Viewport selectieren *)
- Handle := SelectViewport(0, 0, ScreenXmax, ScreenyMax);
- SelectWorld(Handle, -500, -500, 500, 500);
-
- (* Ein "Flugzeug" definieren *)
- Objekt[1].Vektor1[1] := 50; Objekt[1].Vektor1[2] := -80;
- Objekt[1].Vektor2[1] := 0; Objekt[1].Vektor2[2] := 50;
- Objekt[2].Vektor1[1] := 0; Objekt[2].Vektor1[2] := 50;
- Objekt[2].Vektor2[1] := -50; Objekt[2].Vektor2[2] := -80;
- Objekt[3].Vektor1[1] := -50; Objekt[3].Vektor1[2] := -80;
- Objekt[3].Vektor2[1] := 0; Objekt[3].Vektor2[2] := -10;
- Objekt[4].Vektor1[1] := 0; Objekt[4].Vektor1[2] := -10;
- Objekt[4].Vektor2[1] := 50; Objekt[4].Vektor2[2] := -80;
- Objekt[5].Vektor1[1] := 30; Objekt[5].Vektor1[2] := -200;
- Objekt[5].Vektor2[1] := 0; Objekt[5].Vektor2[2] := -10;
- Objekt[6].Vektor1[1] := 0; Objekt[6].Vektor1[2] := -10;
- Objekt[6].Vektor2[1] := -30; Objekt[6].Vektor2[2] := -200;
- Objekt[7].Vektor1[1] := -30; Objekt[7].Vektor1[2] := -200;
- Objekt[7].Vektor2[1] := 0; Objekt[7].Vektor2[2] := -80;
- Objekt[8].Vektor1[1] := 0; Objekt[8].Vektor1[2] := -80;
- Objekt[8].Vektor2[1] := 30; Objekt[8].Vektor2[2] := -200;
-
- AltObjekt := Objekt; (* Sichern *)
-
- (* Ein bisschen rotieren *)
- EinheitsMatrix(TransMat);
- Rotation(TransMat, 30); (* Transformationsmatrix fuer 30 Grad links *)
- (* Einmal 'rum *)
- FOR i := 1 TO 12 DO BEGIN
- ZeigeLinienObjekt(TransMat, Objekt, 8);
- LoescheLinienObjekt(Objekt, 8);
- END;
-
- (* Und nun bewegen *)
- EinheitsMatrix(TransMat);
- Translation(TransMat, 20, 40);
- FOR i := 1 TO 10 DO BEGIN
- ZeigeLinienObjekt(TransMat, Objekt, 8);
- LoescheLinienObjekt(Objekt, 8)
- END;
-
- (* Jetzt am langen Arm drehen *)
- EinheitsMatrix(TransMat);
- Rotation(TransMat, 10); (* 10 Grad Schritte *)
- FOR i := 1 TO 36 DO BEGIN
- ZeigeLinienObjekt(TransMat, Objekt, 8);
- LoescheLinienObjekt(Objekt, 8);
- END;
-
- (* Und nun ein bisschen mit der Groesse spielen *)
- Objekt := AltObjekt;
- EinheitsMatrix(TransMat);
- Skalierung(TransMat, 1.1, 1.1); (* Fuer symmetrische Vergroesserungen *)
- FOR i := 1 TO 20 DO BEGIN
- ZeigeLinienObjekt(TransMat, Objekt, 8);
- LoescheLinienObjekt(Objekt, 8);
- END;
-
- (* Unsymmetrische Vergroesserungen *)
- Objekt := AltObjekt;
- EinheitsMatrix(TransMat);
- Skalierung(TransMat, 1.1, 1.05); (* Mehr x-Zoom *)
- FOR i := 1 TO 40 DO BEGIN
- ZeigeLinienObjekt(TransMat, Objekt, 8);
- LoescheLinienObjekt(Objekt, 8);
- END;
-
- Objekt := AltObjekt;
- EinheitsMatrix(TransMat);
- Skalierung(TransMat, 1.05, 1.1); (* Mehr y-Zoom *)
- FOR i := 1 TO 40 DO BEGIN
- ZeigeLinienObjekt(TransMat, Objekt, 8);
- LoescheLinienObjekt(Objekt, 8);
- END;
-
- (* Ein kleineres Weltkoordinatensystem waehlen *)
- SelectWorld(Handle, -300, -300, 300, 300);
-
- (* Etwas verzerren *)
- Objekt := AltObjekt;
- EinheitsMatrix(TransMat);
- Scherung(TransMat, 0.05, 0.0); (* 5%-Scherung *)
- FOR i := 1 TO 20 DO BEGIN
- ZeigeLinienObjekt(TransMat, Objekt, 8);
- LoescheLinienObjekt(Objekt, 8);
- END;
-
- Objekt := AltObjekt;
- EinheitsMatrix(TransMat);
- Scherung(TransMat, 0.0, 0.05); (* 5%-Scherung *)
- FOR i := 1 TO 20 DO BEGIN
- ZeigeLinienObjekt(TransMat, Objekt, 8);
- LoescheLinienObjekt(Objekt, 8);
- END;
-
- (* Eine Kombination aus Rotation und Translation *)
- Objekt := AltObjekt;
- EinheitsMatrix(TransMat);
- Translation(TransMat, 5, 5);
- Rotation(TransMat, 10);
- FOR i := 1 TO 40 DO BEGIN
- ZeigeLinienObjekt(TransMat, Objekt, 8);
- LoescheLinienObjekt(Objekt, 8);
- END;
-
- CloseWindow(Handle);
- Exit_Graphic;
- END.
-