home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
sonderh1
/
draw.inc
< prev
next >
Wrap
Text File
|
1988-02-01
|
5KB
|
144 lines
(*****************************************************************************)
(* 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;