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

  1. {████████████████████████████████ n-eck.gra ████████████████████████████████████
  2.  
  3.  
  4.  
  5.                             ╔════════════════════╗
  6.                             ║       IBM-PC       ║
  7.                             ║                    ║
  8.                             ║     PC-DOS 3.3     ║
  9.                             ║                    ║
  10.                             ║  TURBO-PASCAL 5.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 : WORD; VAR punkte);
  29.  
  30.  
  31. {░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░}
  32.  
  33. CONST max          = 3200; { max Punkteanzahl }
  34.       achsenfarbe  =    1;
  35.       markenfarbe  =    1;
  36.       polygonfarbe =    2;
  37. TYPE  typ_wert     = EXTENDED;
  38. VAR   x_min   , x_max    ,
  39.       y_min   , y_max    ,
  40.       x_faktor, x_schieb ,
  41.       y_faktor, y_schieb : typ_wert;
  42.       punkt : ARRAY [1 .. max] OF RECORD x, y : typ_wert END ABSOLUTE punkte;
  43.  
  44. {░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  45.  
  46.  
  47.                            Prozedurenverzeichnis
  48.                            ═════════════════════
  49.  
  50.                            alphabetisch sortiert
  51.  
  52.  
  53. Art       Name                  Parameter     - Typ
  54. ───────────────────────────────────────────────────────────────────────────────}
  55. PROCEDURE abbildungsparameter                                         ; FORWARD;
  56. PROCEDURE bestimme_min_max                                            ; FORWARD;
  57. FUNCTION  x_bild               (x             : typ_wert ) : INTEGER  ; FORWARD;
  58. FUNCTION  y_bild               (y             : typ_wert ) : INTEGER  ; FORWARD;
  59. PROCEDURE zeichne_achsen       (farbe         : BYTE                 ); FORWARD;
  60. PROCEDURE zeichne_marken       (farbe         : BYTE                 ); FORWARD;
  61. PROCEDURE zeichne_polygon      (farbe         : BYTE                 ); FORWARD;
  62.  
  63. {░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░}
  64.  
  65. PROCEDURE abbildungsparameter;
  66.  
  67. BEGIN
  68.   x_faktor :=   GETMAXX/(x_max - x_min);
  69.   x_schieb := - x_faktor*x_min;
  70.   y_faktor := - GETMAXY/(y_max - y_min);
  71.   y_schieb := - y_faktor*y_max;
  72. END;
  73.  
  74. {░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░}
  75.  
  76. PROCEDURE bestimme_min_max;
  77.  
  78. VAR k : WORD;
  79.  
  80. BEGIN
  81.   x_min :=  1E30;
  82.   x_max := -1E30;
  83.   y_min :=  1E30;
  84.   y_max := -1E30;
  85.   FOR k := 1 TO n DO WITH punkt [k] DO BEGIN
  86.     IF x_min > x THEN x_min := x;
  87.     IF x_max < x THEN x_max := x;
  88.     IF y_min > y THEN y_min := y;
  89.     IF y_max < y THEN y_max := y;
  90.   END;
  91.   IF x_min < 0 THEN x_min := 1.1*x_min ELSE x_min := 0.9*x_min;
  92.   IF x_max < 0 THEN x_max := 0.9*x_max ELSE x_max := 1.1*x_max;
  93.   IF y_min < 0 THEN y_min := 1.1*y_min ELSE y_min := 0.9*y_min;
  94.   IF y_max < 0 THEN y_max := 0.9*y_max ELSE y_max := 1.1*y_max;
  95. END;
  96.  
  97. {░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░}
  98.  
  99. FUNCTION x_bild;
  100.  
  101. BEGIN
  102.   x_bild := ROUND (x_faktor*x + x_schieb);
  103. END;
  104.  
  105. {░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░}
  106.  
  107. FUNCTION y_bild;
  108.  
  109. BEGIN
  110.   y_bild := ROUND (y_faktor*y + y_schieb);
  111. END;
  112.  
  113. {░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░}
  114.  
  115. PROCEDURE zeichne_achsen;
  116.  
  117. BEGIN
  118.   SETCOLOR (achsenfarbe);
  119.   LINE (0, y_bild (0), GETMAXX, y_bild (0));
  120.   LINE (x_bild (0), 0, x_bild (0), GETMAXY);
  121. END;
  122.  
  123. {░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░}
  124.  
  125. PROCEDURE zeichne_marken;
  126.  
  127. CONST laenge = 5;
  128. VAR   x, xb  ,
  129.       y, yb  ,
  130.       h      : INTEGER;
  131.       satz   : STRING;
  132.  
  133. BEGIN
  134.   SETCOLOR       (markenfarbe);
  135.   SETTEXTSTYLE   (DEFAULTFONT , HORIZDIR, 1);
  136.   yb := y_bild (0);
  137.   IF yb > GETMAXY - 2*laenge THEN BEGIN
  138.     SETTEXTJUSTIFY (CENTERTEXT, BOTTOMTEXT);
  139.     h := -laenge; END
  140.   ELSE BEGIN
  141.     SETTEXTJUSTIFY (CENTERTEXT, TOPTEXT);
  142.     h :=  laenge;
  143.   END;
  144.   FOR x := TRUNC (x_min) TO TRUNC (x_max) DO IF x <> 0 THEN BEGIN
  145.     xb        := x_bild (x);
  146.     LINE      (xb, yb + h, xb, yb - h);
  147.     STR       (x, satz);
  148.     OUTTEXTXY (xb, yb + h, satz);
  149.   END;
  150.   xb := x_bild (0);
  151.   IF xb < 2*laenge THEN BEGIN
  152.     SETTEXTJUSTIFY (LEFTTEXT, CENTERTEXT);
  153.     h := -laenge; END
  154.   ELSE BEGIN
  155.     SETTEXTJUSTIFY (RIGHTTEXT, CENTERTEXT);
  156.     h :=  laenge;
  157.   END;
  158.   FOR y := TRUNC (y_min) TO TRUNC (y_max) DO IF y <> 0 THEN BEGIN
  159.     yb        := y_bild (y);
  160.     LINE      (xb - h, yb, xb + h, yb);
  161.     STR       (y, satz);
  162.     OUTTEXTXY (xb - h, yb, satz);
  163.   END;
  164. END;
  165.  
  166. {░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░}
  167.  
  168. PROCEDURE zeichne_polygon;
  169.  
  170. VAR k      : WORD;
  171.     punkte : ARRAY [0 .. max] OF POINTTYPE;
  172.  
  173. BEGIN
  174.   FOR k := 0 TO n DO WITH punkte [k] DO BEGIN
  175.     x := x_bild (punkt [SUCC (k MOD n)].x);
  176.     y := y_bild (punkt [SUCC (k MOD n)].y);
  177.   END;
  178.   SETFILLSTYLE (SOLIDFILL, polygonfarbe);
  179.   FILLPOLY     (n, punkte);
  180. END;
  181.  
  182. {░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░}
  183.  
  184. VAR taste      : CHAR;
  185.     graphdriver,
  186.     graphmode  : INTEGER;
  187.  
  188. BEGIN
  189.   IF (n < 2) OR (n > max) THEN EXIT;
  190.   graphdriver  := DETECT;
  191.   INITGRAPH    (graphdriver, graphmode, 'D:\turbo-5');
  192.   SETGRAPHMODE (CGAC0);
  193.   SETBKCOLOR   (BLUE);
  194.   bestimme_min_max;
  195.   abbildungsparameter;
  196.   zeichne_polygon (polygonfarbe);
  197.   zeichne_achsen  (achsenfarbe);
  198.   zeichne_marken  (markenfarbe);
  199.   SOUND (800);    { Hz }
  200.   DELAY (120);    { ms }
  201.   NOSOUND;
  202.   DELAY (100);    { ms }
  203.   SOUND (900);    { Hz }
  204.   DELAY (120);    { ms }
  205.   NOSOUND;
  206.   DELAY (100);    { ms }
  207.   SOUND (1000);   { Hz }
  208.   DELAY (120);    { ms }
  209.   NOSOUND;
  210.   READLN;
  211.   CLOSEGRAPH;
  212. END;
  213.  
  214. {██████████████████████████████████████████████████████████████████████████████}
  215.