home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1987 / 07 / grafik / transdem.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1987-06-10  |  4.5 KB  |  145 lines

  1. (*-------------------------------------------------------------------------*)
  2. (*                             TRANSDEM.PAS                                *)
  3. (*    Demonstration der Transformationen von graphischen Objekten:         *)
  4. (*-------------------------------------------------------------------------*)
  5.  
  6. PROGRAM TransDemo (Input,Output);
  7.  
  8. CONST
  9.   (*$I GRAFCONS.PAS *)
  10.  
  11. TYPE
  12.   (*$I GRAFTYPE.PAS *)
  13.  
  14. VAR
  15.   (*$I GRAFVAR.PAS *)
  16.   Handle             : WinNrBereich;
  17.   Objekt, AltObjekt  : LinienObjekt;
  18.   TransMat, a, b, res: tMatrix;
  19.   i                  : INTEGER;
  20.  
  21. (*$I GRAPH.P  <-- Wird fuer Turbo Pascal auf MS-DOS benoetigt. *)
  22. (*$I GRAFSYS.PAS  *)
  23. (*$I INTDDA.PAS   *)
  24. (*$I LINE.PAS     *)
  25. (*$I WINSYS.PAS   *)
  26. (*$I WINGRAF.PAS  *)
  27. (*$I CLIPOINT.PAS *)
  28. (*$I CLIPLINE.PAS *)
  29. (*$I TRANSMAT.PAS *)
  30. (*$I TRANS2D.PAS  *)
  31. (*$I LINEOBJ.PAS  *)
  32.  
  33. BEGIN
  34.   Enter_Graphic;
  35.   InitWindows;
  36.  
  37.   (* Window & Viewport selectieren *)
  38.   Handle := SelectViewport(0, 0, ScreenXmax, ScreenyMax);
  39.   SelectWorld(Handle, -500, -500, 500, 500);
  40.  
  41.   (* Ein "Flugzeug" definieren *)
  42.   Objekt[1].Vektor1[1] := 50;  Objekt[1].Vektor1[2] := -80;
  43.   Objekt[1].Vektor2[1] := 0;   Objekt[1].Vektor2[2] := 50;
  44.   Objekt[2].Vektor1[1] := 0;   Objekt[2].Vektor1[2] := 50;
  45.   Objekt[2].Vektor2[1] := -50; Objekt[2].Vektor2[2] := -80;
  46.   Objekt[3].Vektor1[1] := -50; Objekt[3].Vektor1[2] := -80;
  47.   Objekt[3].Vektor2[1] := 0;   Objekt[3].Vektor2[2] := -10;
  48.   Objekt[4].Vektor1[1] := 0;   Objekt[4].Vektor1[2] := -10;
  49.   Objekt[4].Vektor2[1] := 50;  Objekt[4].Vektor2[2] := -80;
  50.   Objekt[5].Vektor1[1] := 30;  Objekt[5].Vektor1[2] := -200;
  51.   Objekt[5].Vektor2[1] := 0;   Objekt[5].Vektor2[2] := -10;
  52.   Objekt[6].Vektor1[1] := 0;   Objekt[6].Vektor1[2] := -10;
  53.   Objekt[6].Vektor2[1] := -30; Objekt[6].Vektor2[2] := -200;
  54.   Objekt[7].Vektor1[1] := -30; Objekt[7].Vektor1[2] := -200;
  55.   Objekt[7].Vektor2[1] := 0;   Objekt[7].Vektor2[2] := -80;
  56.   Objekt[8].Vektor1[1] := 0;   Objekt[8].Vektor1[2] := -80;
  57.   Objekt[8].Vektor2[1] := 30;  Objekt[8].Vektor2[2] := -200;
  58.  
  59.   AltObjekt := Objekt; (* Sichern *)
  60.  
  61.   (* Ein bisschen rotieren *)
  62.   EinheitsMatrix(TransMat);
  63.   Rotation(TransMat, 30);    (* Transformationsmatrix fuer 30 Grad links *)
  64.   (* Einmal 'rum *)
  65.   FOR i := 1 TO 12 DO BEGIN
  66.     ZeigeLinienObjekt(TransMat, Objekt, 8);
  67.     LoescheLinienObjekt(Objekt, 8);
  68.   END;
  69.  
  70.   (* Und nun bewegen *)
  71.   EinheitsMatrix(TransMat);
  72.   Translation(TransMat, 20, 40);
  73.   FOR i := 1 TO 10 DO BEGIN
  74.     ZeigeLinienObjekt(TransMat, Objekt, 8);
  75.     LoescheLinienObjekt(Objekt, 8)
  76.   END;
  77.  
  78.   (* Jetzt am langen Arm drehen *)
  79.   EinheitsMatrix(TransMat);
  80.   Rotation(TransMat, 10);     (* 10 Grad Schritte *)
  81.   FOR i := 1 TO 36 DO BEGIN
  82.     ZeigeLinienObjekt(TransMat, Objekt, 8);
  83.     LoescheLinienObjekt(Objekt, 8);
  84.   END;
  85.  
  86.   (* Und nun ein bisschen mit der Groesse spielen *)
  87.   Objekt := AltObjekt;
  88.   EinheitsMatrix(TransMat);
  89.   Skalierung(TransMat, 1.1, 1.1); (* Fuer symmetrische Vergroesserungen *)
  90.   FOR i := 1 TO 20 DO BEGIN
  91.     ZeigeLinienObjekt(TransMat, Objekt, 8);
  92.     LoescheLinienObjekt(Objekt, 8);
  93.   END;
  94.  
  95.   (* Unsymmetrische Vergroesserungen *)
  96.   Objekt := AltObjekt;
  97.   EinheitsMatrix(TransMat);
  98.   Skalierung(TransMat, 1.1, 1.05); (* Mehr x-Zoom *)
  99.   FOR i := 1 TO 40 DO BEGIN
  100.     ZeigeLinienObjekt(TransMat, Objekt, 8);
  101.     LoescheLinienObjekt(Objekt, 8);
  102.   END;
  103.  
  104.   Objekt := AltObjekt;
  105.   EinheitsMatrix(TransMat);
  106.   Skalierung(TransMat, 1.05, 1.1); (* Mehr y-Zoom *)
  107.   FOR i := 1 TO 40 DO BEGIN
  108.     ZeigeLinienObjekt(TransMat, Objekt, 8);
  109.     LoescheLinienObjekt(Objekt, 8);
  110.   END;
  111.  
  112.   (* Ein kleineres Weltkoordinatensystem waehlen *)
  113.   SelectWorld(Handle, -300, -300, 300, 300);
  114.  
  115.   (* Etwas verzerren *)
  116.   Objekt := AltObjekt;
  117.   EinheitsMatrix(TransMat);
  118.   Scherung(TransMat, 0.05, 0.0);     (* 5%-Scherung *)
  119.   FOR i := 1 TO 20 DO BEGIN
  120.     ZeigeLinienObjekt(TransMat, Objekt, 8);
  121.     LoescheLinienObjekt(Objekt, 8);
  122.   END;
  123.  
  124.   Objekt := AltObjekt;
  125.   EinheitsMatrix(TransMat);
  126.   Scherung(TransMat, 0.0, 0.05);    (* 5%-Scherung *)
  127.   FOR i := 1 TO 20 DO BEGIN
  128.     ZeigeLinienObjekt(TransMat, Objekt, 8);
  129.     LoescheLinienObjekt(Objekt, 8);
  130.   END;
  131.  
  132.   (* Eine Kombination aus Rotation und Translation *)
  133.   Objekt := AltObjekt;
  134.   EinheitsMatrix(TransMat);
  135.   Translation(TransMat, 5, 5);
  136.   Rotation(TransMat, 10);
  137.   FOR i := 1 TO 40 DO BEGIN
  138.     ZeigeLinienObjekt(TransMat, Objekt, 8);
  139.     LoescheLinienObjekt(Objekt, 8);
  140.   END;
  141.  
  142.   CloseWindow(Handle);
  143.   Exit_Graphic;
  144. END.
  145.