home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* WRLDDEMO.PAS *)
- (* Demonstration der Unit WORLD.PAS *)
- (* (C) 1991 Hagen Lehmann & TOOLBOX *)
- (* ------------------------------------------------------ *)
- PROGRAM WrldDemo;
-
- USES Crt, Graph, World, Dos; { Reihenfolge !!! }
-
- VAR
- Driver, Mode : INTEGER;
- Loop, Worlds : WORD;
- Key : CHAR;
- DriverPath : STRING;
-
-
-
- PROCEDURE DrawLines;
- BEGIN
- Rectangle(0, 0, 719, 347);
- END;
-
-
-
- VAR
- Gd, Gm, LochStep, LochStart,
- LochEnde, X0, Y0, ZRing, ZRad : INTEGER;
- RRing, RRad, WRing, WRad,
- StepRing, StepRad, ZwoPi,
- XStart, YStart, XP, YP : REAL;
- ch : CHAR;
-
- PROCEDURE Input; { Eingabe aller Parameter }
- BEGIN
- X0 := GetMaxX DIV 2;
- Y0 := GetMaxY DIV 2;
- RRing := GetMaxY DIV 2;
- LochStep := 2;
- ZRing := 100;
- ZRad := 66;
- LochStart := 4;
- LochEnde := 9;
- END;
-
- PROCEDURE Zeichnen;
- VAR
- AnzStepRing, c, d, x: INTEGER;
- PRadX, PRadY : REAL;
- XAsp, YAsp : WORD;
- RUmX, RUmY : REAL;
- BEGIN
- SetBkColor(0);
-
- GetAspectRatio(XAsp, YAsp); { Verzerrung ausgleichen }
-
- (* XAsp := 347; YAsp:= 719; *)
- RRad := RRing * ZRad / ZRing;
- RUmY := RRing - RRad;
- RUmX := RUmY * YAsp / XAsp;
- AnzStepRing := 5 * ((2 * ZRing) DIV ZRad);
- StepRing := Pi / AnzStepRing; { Winkelschritt im Ring }
- StepRad := -StepRing * (ZRing / ZRad - 1); { Winkel Rad }
- FOR x := LochStart TO LochEnde DO BEGIN
- SetColor(1 + x MOD GetMaxColor);
- PRadY := RRad - LochStep * 2 * x - 8; { Mittelpunkt }
- PRadX := PRadY *YAsp / XAsp; { des Rads }
- IF PRadX < 0 THEN Exit;
- XStart := X0 + RUmX * Sin(0) + PRadX * Sin(0); { Start }
- YStart := Y0 - RUmY * Cos(0) - PRadY * Cos(0);
- MoveTo(Round(XStart), Round(YStart));
- WRing := 0;
- WRad := 0;
- d := 0;
- REPEAT { einzelne Kurve zeichnen }
- FOR c := 1 TO 2 * AnzStepRing DO BEGIN { ein Umlauf }
- Inc(d);
- WRad := StepRad * d; { Winkel Rad }
- WRing := StepRing * c; { Winkel im Ring }
- XP := X0 + RUmX * Sin(WRing) + PRadX * Sin(WRad);
- YP := Y0 - RUmY * Cos(WRing) - PRadY * Cos(WRad);
- LineTo(Round(XP), Round(YP));
- END;
- UNTIL (Abs(XStart-XP) < 0.01) AND { Startpunkt }
- (Abs(YStart-YP) < 0.01); { erreicht? }
- END;
- END;
-
- PROCEDURE DrawWorld;
- BEGIN
- ZwoPi := 2 * Pi;
- Input;
- Zeichnen;
- END;
-
-
- BEGIN
- ClrScr;
- DriverPath := GetEnv('BGIPATH');
- Driver := Detect;
- InitGraph(Driver, Mode, DriverPath);
-
- SetBkColor(1);
- SetColor(14);
-
- GivenWorld(719, 347); { Koordinaten sind von HERCULES }
-
- DefineWorld(1, 0, 0, GetMaxX, GetMaxY, TRUE);
- DefineWorld(2, 0, 0, GetMaxX DIV 2, GetMaxY DIV 2, TRUE);
- DefineWorld(3, GetMaxX DIV 2, 0, GetMaxX,
- GetMaxY DIV 2,TRUE);
- DefineWorld(4, 0, GetMaxY DIV 2, GetMaxX, GetMaxY, TRUE);
-
- FOR Worlds := 1 TO 4 DO BEGIN
- { alle Welten durchspielen }
- SelectWorld(Worlds); { jeweilige Welt übernehmen }
- ClearWorld; { Weltinhalt löschen }
- DrawLines; { Linien mit Herculeskoordinaten zeichnen }
- DrawWorld; { "WORLD" mit Herculeskoordinaten zeichnen }
- Key := ReadKey;
- END;
- CloseGraph;
- END.
- (* ------------------------------------------------------ *)
- (* Ende von WRLDDEMO.PAS *)
-