(**************************************************************************) (* *) (* MPG - Graphik - System *) (* *) (* Version 2.1 vom 10.09.1987 *) (* *) (* (c) 1987 Beat Jegerlehner & Carsten Weinholz *) (* unter Verwendung der Standard-Graphik *) (* "Turtle-Graphik" geschrieben von B.Jegerlehner *) (* *) (**************************************************************************) (* *) (* Dieses Paket stellt eine LOGO-aehnliche *) (* 'Schildkroetengraphik' zur Verfuegung *) (* *) (**************************************************************************) PACKET turtle graphics DEFINES begin turtle, end turtle, forward , forward to , turn , turn to , pen up , pen down , pen , angle , get turtle : REAL VAR x pos, y pos, winkel; PICFILE VAR bild; PICTURE VAR pic; BOOL VAR direct, pen status; PROC begin turtle: direct := TRUE; x pos := 0.0; y pos := 0.0; winkel := 0.0; begin plot; clear; viewport (0.0, 1.0, 0.0, 1.0); window (-500.0, 500.0, -500.0, 500.0); pen up; forward to (0.0, 0.0) END PROC begin turtle; PROC begin turtle (TEXT CONST picfile): direct := FALSE; bild := picture file (picfile); pic := nilpicture; x pos := 0.0; y pos := 0.0; winkel := 0.0; pen up; forward to (0.0,0.0) END PROC begin turtle; PROC end turtle: IF direct THEN end plot ELSE ausgabe FI. ausgabe: REAL VAR x cm,y cm; INT VAR dummy; put picture (bild,pic); drawing area (x cm,y cm,dummy,dummy); viewport (bild, 0.0, 1.0, 0.0, 1.0); window (bild, -500.0,500.0,-500.0,500.0); plot(bild) END PROC end turtle; PROC turn (REAL CONST w): winkel := (winkel + w) MOD 360.0 END PROC turn; PROC turn to (REAL CONST w): winkel := w MOD 360.0 END PROC turn to; REAL PROC angle: winkel END PROC angle; PROC forward (REAL CONST len): forward to (x pos + cosd (winkel) * len, y pos + sind (winkel) * len) END PROC forward; PROC pen up: pen status := FALSE END PROC pen up; PROC pen down: pen status := TRUE END PROC pen down; BOOL PROC pen: pen status END PROC pen; PROC forward to (REAL CONST x,y): IF direct THEN dir plot ELSE pic plot FI; x pos := x; y pos := y. dir plot: IF pen status THEN draw (x,y) ELSE move (x,y) FI. pic plot: IF length (pic) > 1923 THEN put picture (bild,pic); pic := nilpicture FI; IF pen status THEN draw (pic,x,y) ELSE move (pic,x,y) FI END PROC forward to; PROC get turtle (REAL VAR x,y): x := x pos; y := y pos END PROC get turtle END PACKET turtle graphics