home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 07 / beilage / n_eck_30.gra < prev    next >
Encoding:
Text File  |  1989-04-27  |  5.4 KB  |  186 lines

  1. {███████████████████████████████ n-eck-30.gra ██████████████████████████████████
  2.  
  3.  
  4.  
  5.                             ╔════════════════════╗
  6.                             ║       IBM-PC       ║
  7.                             ║                    ║
  8.                             ║     PC-DOS 3.3     ║
  9.                             ║                    ║
  10.                             ║  TURBO-PASCAL 3.0  ║
  11.                             ╚════════════════════╝
  12.  
  13.  
  14.  
  15.          ┌──────────────────────────────────────────────────────────┐
  16.          │  (C) Karl Schlessmann  Oken-Gymnasium  Vogesenstraße 10  │
  17.          │      27.04.1989        Tel 0781/76386  7600 Offenburg    │
  18.          └──────────────────────────────────────────────────────────┘
  19.  
  20.  
  21.  
  22. Prozedur zum Zeichnen eines beliebigen Polygons
  23. ───────────────────────────────────────────────────────────────────────────────}
  24.  
  25. {██████████████████████████████████████████████████████████████████████████████}
  26.  
  27.  
  28. PROCEDURE zeichne_n_eck (n : INTEGER; VAR punkte);
  29.  
  30.  
  31. {░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░}
  32.  
  33. CONST max          = 4000;
  34.       achsenfarbe  =    1;
  35.       markenfarbe  =    1;
  36.       polygonfarbe =    2;
  37.       GETMAXX      =  319;
  38.       GETMAXY      =  199;
  39. TYPE  typ_wert     = REAL;
  40. VAR   x_min   , x_max    ,
  41.       y_min   , y_max    ,
  42.       x_faktor, x_schieb ,
  43.       y_faktor, y_schieb : typ_wert;
  44.       punkt : ARRAY [1 .. max] OF RECORD x, y : typ_wert END ABSOLUTE punkte;
  45.  
  46. {░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  47.  
  48.  
  49.                               Prozedurenverzeichnis
  50.                               ═════════════════════
  51.  
  52.                               alphabetisch sortiert
  53.  
  54.  
  55. Art       Name                  Parameter     - Typ
  56. ───────────────────────────────────────────────────────────────────────────────}
  57. PROCEDURE abbildungsparameter                                         ; FORWARD;
  58. PROCEDURE bestimme_min_max                                            ; FORWARD;
  59. FUNCTION  x_bild               (x             : typ_wert ) : INTEGER  ; FORWARD;
  60. FUNCTION  y_bild               (y             : typ_wert ) : INTEGER  ; FORWARD;
  61. PROCEDURE zeichne_achsen       (farbe         : BYTE                 ); FORWARD;
  62. PROCEDURE zeichne_marken       (farbe         : BYTE                 ); FORWARD;
  63. PROCEDURE zeichne_polygon      (farbe         : BYTE                 ); FORWARD;
  64.  
  65. {░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░}
  66.  
  67. PROCEDURE abbildungsparameter;
  68.  
  69. BEGIN
  70.   x_faktor :=   GETMAXX/(x_max - x_min);
  71.   x_schieb := - x_faktor*x_min;
  72.   y_faktor := - GETMAXY/(y_max - y_min);
  73.   y_schieb := - y_faktor*y_max;
  74. END;
  75.  
  76. {░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░}
  77.  
  78. PROCEDURE bestimme_min_max;
  79.  
  80. VAR k : INTEGER;
  81.  
  82. BEGIN
  83.   x_min :=  1E30;
  84.   x_max := -1E30;
  85.   y_min :=  1E30;
  86.   y_max := -1E30;
  87.   FOR k := 1 TO n DO WITH punkt [k] DO BEGIN
  88.     IF x_min > x THEN x_min := x;
  89.     IF x_max < x THEN x_max := x;
  90.     IF y_min > y THEN y_min := y;
  91.     IF y_max < y THEN y_max := y;
  92.   END;
  93.   IF x_min < 0 THEN x_min := 1.1*x_min ELSE x_min := 0.9*x_min;
  94.   IF x_max < 0 THEN x_max := 0.9*x_max ELSE x_max := 1.1*x_max;
  95.   IF y_min < 0 THEN y_min := 1.1*y_min ELSE y_min := 0.9*y_min;
  96.   IF y_max < 0 THEN y_max := 0.9*y_max ELSE y_max := 1.1*y_max;
  97. END;
  98.  
  99. {░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░}
  100.  
  101. FUNCTION x_bild;
  102.  
  103. BEGIN
  104.   x_bild := ROUND (x_faktor*x + x_schieb);
  105. END;
  106.  
  107. {░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░}
  108.  
  109. FUNCTION y_bild;
  110.  
  111. BEGIN
  112.   y_bild := ROUND (y_faktor*y + y_schieb);
  113. END;
  114.  
  115. {░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░}
  116.  
  117. PROCEDURE zeichne_achsen;
  118.  
  119. BEGIN
  120.   DRAW (0, y_bild (0), GETMAXX, y_bild (0), achsenfarbe);
  121.   DRAW (x_bild (0), 0, x_bild (0), GETMAXY, achsenfarbe);
  122. END;
  123.  
  124. {░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░}
  125.  
  126. PROCEDURE zeichne_marken;
  127.  
  128. CONST laenge = 5;
  129. VAR   x, xb  ,
  130.       y, yb  : INTEGER;
  131.  
  132. BEGIN
  133.   yb := y_bild (0);
  134.   FOR x := TRUNC (x_min) TO TRUNC (x_max) DO IF x <> 0 THEN BEGIN
  135.     xb   := x_bild (x);
  136.     DRAW (xb, yb + laenge, xb, yb - laenge, markenfarbe);
  137.   END;
  138.     xb := x_bild (0);
  139.   FOR y := TRUNC (y_min) TO TRUNC (y_max) DO IF y <> 0 THEN BEGIN
  140.     yb   := y_bild (y);
  141.     DRAW (xb - laenge, yb, xb + laenge, yb, markenfarbe);
  142.   END;
  143. END;
  144.  
  145. {░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░}
  146.  
  147. PROCEDURE zeichne_polygon;
  148.  
  149. VAR k : INTEGER;
  150.  
  151. BEGIN
  152.   FOR k := 1 TO n DO WITH punkt [SUCC (k MOD n)] DO
  153.     DRAW (x_bild (punkt [k].x), y_bild (punkt [k].y),
  154.           x_bild (x), y_bild (y), polygonfarbe);
  155. END;
  156.  
  157. {░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ Hauptprozedur ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░}
  158.  
  159. VAR taste : CHAR;
  160.  
  161. BEGIN
  162.   IF (n < 2) OR (n > max) THEN EXIT;
  163.   GRAPHCOLORMODE;
  164.   GRAPHBACKGROUND (BLUE);
  165.   PALETTE (2);
  166.   bestimme_min_max;
  167.   abbildungsparameter;
  168.   zeichne_polygon (polygonfarbe);
  169.   zeichne_achsen  (achsenfarbe);
  170.   zeichne_marken  (markenfarbe);
  171.   SOUND (800);    { Hz }
  172.   DELAY (120);    { ms }
  173.   NOSOUND;
  174.   DELAY (100);    { ms }
  175.   SOUND (900);    { Hz }
  176.   DELAY (120);    { ms }
  177.   NOSOUND;
  178.   DELAY (100);    { ms }
  179.   SOUND (1000);   { Hz }
  180.   DELAY (120);    { ms }
  181.   NOSOUND;
  182.   READLN;
  183. END;
  184.  
  185. {██████████████████████████████████████████████████████████████████████████████}
  186.