ANGL
ANGL | |
Syntax: | ANGL <x>,<y>,<w>,<rx>,<ry>,<f> |
Parameter | |
x: X-Koordinate Mittelpunkt (0..319 / 0..159) | |
y: Y-Koordinate Mittelpunkt (0..199) | |
w: Winkel in Altgrad (0..359) | |
rx: Radius in X-Richtung (0..255) | |
ry: Radius in Y-Richtung (0..255) | |
f: Farbquelle (0..2 / 0..4) | |
Einordnung | |
Typ: | Anweisung |
Kontext: | Grafik |
Aufgabe: | Zeichnen des Radius von Ellipsen (u. Kreisen) |
Abkürzung: | keine (TSB: aN) |
Token: | $64 $6a (100 106) |
Verwandte Befehle | |
LINE - REC - BLOCK - PLOT - ARC - CIRCLE - PAINT |
Dieser Artikel beschreibt das Simons'-Basic-Schlüsselwort ANGL.
Typ: Anweisung
Syntax: ANGL <x>,<y>,<w>,<rx>,<ry>,<f>
Wenn CIRCLE für Ellipsen und Kreise zuständig ist, freut man sich über den Befehl ANGL zum Zeichnen von Radiuslinien in diesen Figuren.
Sie gehen aus vom Mittelpunkt (<x>,<y>) einer Ellipse (bzw. eines Kreises), verlaufen in der Richtung <w> (mit Winkelangaben in Altgrad) und reichen bis zur (imaginären) Ellipsen- bzw. Kreislinie mit den Radien <rx> und <ry> in der Farbe, die durch <f> bestimmt wird (s. dazu HIRES). In x-Richtung dürfen Ellipsen 255 Punkte Radius aufweisen, in y-Richtung ebenfalls.
Punkte, die über den Bildschirmrand hinausgehen würden, werden auf diese höchstmöglichen Koordinaten begrenzt, der Interpreter malt aber weiter. Die Farbe hängt vom Grafikmodus ab und bezieht sich auf die Farbangaben hinter HIRES einerseits bzw. MULTI und LOW COL andererseits. Der Punkt 0,0 ist in der linken oberen Ecke.
Beachten: Zu große Angaben bei <w> werden nicht abgewiesen, aber dennoch - dann falsch - berechnet. Wenn für <w> Werte angegeben werden, die über 360 Grad hinausgehen, ergibt sich intern Folgendes: w = 360 + (360 - w), für ein <w> von 370 verwendet der Interpreter also den Wert 350.
Wird kein Parameter eingegeben, so erscheint die Fehlermeldung ?SYNTAX ERROR, bei einem falschen Wert erscheint ?ILLEGAL QUANTITY ERROR.
Beispiel[Bearbeiten | Quelltext bearbeiten]
Vorher bitte zuerst die Systemvariable TIME$ bzw. TI$ stellen.
100 HIRES 0,1: mx=160: my=100: h=0: m=0: s=0 110 CIRCLE mx,my,90,90,1: CIRCLE mx,my,85,85,1: PAINT mx+87,my,1 115 FOR w=0 TO 359 STEP 30: ANGL mx,my,w,90,90,0: NEXT 120 REPEAT: GET x$ 130 t$=ti$: hh=VAL(LEFT$(t$,2))*30: mm=VAL(MID$(t$,3,2))*6: ss=VAL(RIGHT$(t$,2))*6 131 IF hh>=360 THEN hh=hh-360 133 mh=DIV(mm,12): hh=hh+mh: hf=hh<>h: mf=mm<>m: sf=ss<>s 140 zz$=LEFT$(t$,2)+":"+MID$(t$,3,2)+":"+RIGHT$(t$,2) 145 IF t$=ti$ THEN TEXT 250,190,zz$,1,1,8 150 IF sf THEN ANGL mx,my,s,83,83,0: ANGL mx,my,ss,83,83,1: s=ss: mf=(s-6)=m 155 RCOMP hf=((s-12)<=h) AND (s>=h) 160 IF mf THEN ANGL mx,my,m,70,70,0: ANGL mx,my,mm,70,70,1: m=mm 165 RCOMP hf=((m-12)<=h) AND (m>=h) 170 IF hf THEN ANGL mx,my,h,45,45,0: ANGL mx,my,hh,45,45,1: h=hh 220 IF t$<>ti$ THEN BLOCK 250,190,250+8*8,190+8,0 230 UNTIL x$>""
Das Programm erzeugt die abgebildete Animation.
Kommentar: hf, mf und sf (Zeile 133) sind Flags, die dafür sorgen, dass ein Zeiger, der gerade überholt wird, nicht für die nächste Runde verschwindet (da der überholende Zeiger ihn löscht). Probleme machte dabei der Stundenzeiger, der sich ja im Laufe der Stunde auch bewegt, allerdings anders als der Minuten- und Sekundenzeiger. Daher die Bereichsabfragen hinter RCOMP. Eine Variante wäre den Stundenzeiger auch alle 12 Minuten vorrücken lassen zu können, aber diese hier ist "echter". Zweimal am Tag verschwindet der Stundenzeiger dennoch: um 2 Minuten vor 12 für 3 Minuten, eben wegen Zeilen 155 und 165.
$ | % | @ | ANGL | ARC | AT | AUTO | BCKGNDS | BFLASH | BLOCK | CALL | CENTRE | CGOTO | CHAR | CHECK | CIRCLE | CMOB | COLD | COLOUR | COPY | CSET | DELAY | DESIGN | DETECT | DIR | DISABLE | DISAPA | DISK | DISPLAY | DIV | DOWN | DRAW | DUMP | DUP | ELSE | END LOOP | END PROC | ENVELOPE | ERRLN | ERRN | EXEC | EXIT | EXOR | FCHR | FCOL | FETCH | FILL | FIND | FLASH | FRAC | GLOBAL | GRAPHICS | HI COL | HIRES | HRDCPY | INKEY | INSERT | INST | INV | JOY | KEY | LEFT | LIN | LINE | LOCAL | LOOP | LOW COL | MEM | MERGE | MMOB | MOB OFF | MOB SET | MOD | MOVE | MULTI | MUSIC | NO ERROR | NRM | OFF | OLD | ON ERROR | ON KEY | OPTION | OUT | PAGE | PAINT | PAUSE | PENX | PENY | PLACE | PLAY | PLOT | POT | PROC | RCOMP | REC | RENUMBER | REPEAT | RESET | RESUME | RETRACE | RIGHT | RLOCMOB | ROT | SCRLD | SCRSV | SECURE | SOUND | TEST | TEXT | TRACE | UNTIL | UP | USE | VOL | WAVE