Ich hab mal eine Frage an Systemprogrammierer. Ich hab mal mit TSB (in Simons' Basic wäre das so ähnlich) einen Kreis mit Bresenham-Algorithmus (mit dem Befehl PLOT) und dann mit identischen Parametern mit dem eingebauten Befehl ARC malen lassen. Ergebnis: die PLOT-Version ist viereinhalb Mal schneller als der Maschinenalgorithmus von ARC. Das liegt nun daran, dass (T)SB Kreise mit SIN und COS berechnen und zwar Punkt für Punkt (keine Quadranten bzw. Oktanten wie Bresenham).
Meine Frage nun: Wie kann ich bei Bresenham clippen, so dass ich einen Befehl wie ARC (wenn ich das umprogrammiere) auch für Kreisbögen - wofür er gedacht ist - verwenden kann? In BASIC65 (vom Mega65) scheint das zu gehen.
Hier mein Listing (läuft unter TSB und zeichnet zwei Kreise mit Angabe der Abarbeitungsdauer):
- 90 rem" Kreis mit Bresenham und ohne:
- 91 rem" mx: Kreismittelpunkt x (160)
- 92 rem" my: Kreismittelpunkt y (100)
- 93 rem" rx/ry: Radius (99)
- 94 rem" sw: Startwinkel (0)
- 95 rem" ew: Endwinkel (359)
- 96 rem" ww: Winkelschrittweite (1)
- 97 rem" m: Schreibmodus (1)
- 98 rem" f: Arbeitsvariable in Bresenham
- 99 :
- 100 hires 0,1:x=99:y=0:f=x:check
- 110 mx=160:my=100:rx=x:ry=rx
- 120 sw=0:ew=359:ww=1:m=1
- 122 :
- 125 colour 15,12:settimer
- 126 plotmx-rx,my,m:plotmx+rx,my,m
- 127 plotmx,my-ry,m:plotmx,my+ry,m
- 130 repeat:coords:until y>x
- 135 timer:text 4,4,"{ctrl-b}PLOT: "+tm$,m,1,8
- 137 :
- 160 colour12,12:settimer
- 170 arc mx,my,sw,ew,ww,rx,ry,m
- 180 timer:text 4,12,"{ctrl-b}ARC : "+tm$,m,1,8
- 182 :
- 190 colour11,12,0
- 200 do null
- 210 end
- 220 :
- 230 proc timer
- 250 tm$="":for i=0 to 3:tm$=tm$+$$peek($dc0b-i):next
- 260 t$=tm$:tm$=mid$(tm$,5,2)+"."+mid$(tm$,7,2)+"s"
- 270 end proc
- 275 :
- 280 proc settimer
- 290 for i=0 to 3:poke $dc0b-i,0:next:poke $dc0e,peek($02a6)*128+1
- 300 end proc
- 305 :
- 1000 proc coords
- 1030 dy=y*2+1:y=y+1:f=f-dy:iff<0thendx=1-x*2:x=x-1:f=f-dx
- 1040 plotmx+x,my+y,m:plotmx-x,my+y,m
- 1050 plotmx-x,my-y,m:plotmx+x,my-y,m
- 1060 plotmx+y,my+x,m:plotmx-y,my+x,m
- 1070 plotmx-y,my-x,m:plotmx+y,my-x,m
- 1080 end proc
Mein (Fern-) Ziel ist es, die schnarchlangsamen Algorithmen von Simons' Basic in TSB zu ersetzen. Geht das überhaupt? (Die Sprite-Bewegungsbefehle nutzen ebenfalls die PLOT-Routinen.)
Arndt