home *** CD-ROM | disk | FTP | other *** search
- (*****************************************************************************)
- (* DRAW.INC *)
- (* *)
- (* Zeichnen des Graphen von f - CGA-Version *)
- (*****************************************************************************)
-
- Procedure DrawGraph;
-
- Var xmin,xmax,
- ymin,ymax,
- dx,dy,x,d :Real;
- s :Integer;
-
-
- (* ----- hardwareabhängiger Teil, hier speziell für IBM-Farbgrafikkarte ---- *)
- (* *)
-
- Const ScreenXMax = 639; (* Maximalzahl-1 von Bildpunkten in x-Richtung *)
- ScreenYMax = 199; (* - - - - y-Richtung *)
- Left = 20; (* Abstand linker Rand/Zeichnung in Bildpunkten *)
- Bottom = 20; (* - unterer - - - *)
- XTickLen = 2; (* Länge der x-Unterteilungsstriche - *)
- YTickLen = 4; (* Breite der y- - - *)
-
-
- Procedure EnterGraphicMode;
-
- (* erledigt alle notwendigen Einstellungen zum Grafikbetrieb *)
-
- Begin
- HiRes;
- End;
-
-
- Procedure LeaveGraphicMode;
-
- (* erledigt alle notwendigen Einstellungen zum Textbetrieb *)
-
- Begin
- TextMode;
- End;
-
-
- Procedure Point (x,y :Integer);
-
- (* zeichnet einen Punkt an der Bildschirmkoordinate (x,y); der Ursprung
- des dabei zugrundegelegten Koordinatensystems wird in der linken un-
- teren Ecke des Bildschirms angenommen. *)
-
- Begin
- Plot (x,y,1)
- End;
-
-
- Procedure Line (x1,y1,x2,y2 :Integer);
-
- (* verbindet die Bildschirmkoordinaten (x1,y1) und (x2,y2) durch eine
- Linie; es gilt das unter "Point" spezifizierte Koordinatensystem. *)
-
- Begin
- Draw (x1, ScreenYMax-y1, x2, ScreenYMax-y2, 1)
- End;
-
- (* *)
- (* ------------------ Ende des hardwareabhängigen Teils ------------------- *)
-
-
- Procedure WorldToScreen (x,y :Real; Var xs,ys :Integer);
-
- (* rechnet die Weltkoordinaten (x,y) in Schirmkoordinaten (xs,ys) um *)
-
- Begin
- xs := round((x-xmin)*(ScreenXMax-Left)/(xmax-xmin)) + Left;
- ys := round((y-ymin)*(ScreenYMax-Bottom)/(ymax-ymin)) + Bottom
- End;
-
-
- Procedure DrawLine (x1,y1,x2,y2 :Real);
-
- (* zeichnet eine Linie zwischen den Weltkoordinaten (x1,y1) und (x2,y2) *)
-
- Var xp1,yp1,xp2,yp2 :Integer;
-
- Begin
- WorldToScreen (x1, y1, xp1, yp1);
- WorldToScreen (x2, y2, xp2, yp2);
- Line (xp1,yp1,xp2,yp2)
- End;
-
-
- Procedure DrawAxis;
-
- (* zeichnet das Achsenkreuz *)
-
- Var x,y,Dist :Real;
-
- Begin
- Line (Left, Bottom, Left, ScreenYMax);
- Line (Left, Bottom, ScreenXMax, Bottom);
- DrawLine (xmin, 0, xmax, 0);
- DrawLine (0, ymin, 0, ymax);
- dist := dy*(ScreenYMax-Bottom)/(ymax-ymin); (* Abstand y-Unterteilung *)
- x := Left;
- y := Bottom;
- While y <= ScreenYMax do
- Begin
- Line (round(x-YTickLen), round(y), round(x+YTickLen), round(y));
- y := y + Dist
- End;
- dist := dx*(ScreenXMax-Left)/(xmax-xmin); (* Abstand x-Unterteilung *)
- x := Left;
- y := Bottom;
- While x <= ScreenXMax do
- Begin
- Line (round(x), round(y-XTickLen), round(x), round(y+XTickLen));
- x := x + Dist
- End;
- End;
-
-
- Begin
- ClrScr;
- WriteLn ('Funktion zeichnen'); WriteLn;
- Write ('im Bereich von xmin='); Read (xmin);
- Write (' bis xmax='); Read (xmax);
- Write (' mit Schrittweite dx='); ReadLn (dx); WriteLn;
- Write (' von ymin='); Read (ymin);
- Write (' bis ymax='); Read (ymax);
- Write (' mit Schrittweite dy='); ReadLn (dy); WriteLn;
- Write ('Anzahl der zu berechnenden Stützstellen: '); ReadLn (s);
-
- EnterGraphicMode; (* Grafik initialisieren *)
- DrawAxis; (* Achsenkreuz zeichnen *)
- x := xmin;
- d := (xmax-xmin)/s;
- While x+d <= xmax do
- Begin
- DrawLine (x, fn(x,0), x+d, fn(x+d,0)); (* Zeichnen der Funktion *)
- x := x + d
- End;
- Repeat until KeyPressed;
- LeaveGraphicMode
- End;