Ich nutze jetzt zur Ansteuerung von zwei Schrittmotoren um einen Kreis
zu fahren den Bresenham Algorithmus.
Der Psudocode für den ersten Oktankt sieht folgendermaßen aus (von
Wikipedia kopiert):
1 | x = r
|
2 | y = 0
|
3 | fehler = r
|
4 |
|
5 | WHILE y < x
|
6 | REM Schritt in schnelle Richtung
|
7 | dy = y*2+1 : REM bei Assembler-Implementierung *2 per Shift
|
8 | y = y+1
|
9 | fehler = fehler-dy
|
10 | IF fehler<0 THEN
|
11 | REM Schritt in langsame Richtung (hier negative x-Richtung)
|
12 | dx = 1-x*2 : REM bei Assembler-Implementierung *2 per Shift
|
13 | x = x-1
|
14 | fehler = fehler-dx
|
15 | END IF
|
Ich habe mir jetzt gedacht und auch so umgesetzt, dass ich ja den
zweiten Oktanten gleich weiterberechnen kann (muss da ja auch keine
Bewegungsrichtung ändern), bis x <= 0 ist. Ich habe für diesen 2.
Oktanten den Algorithmus etwas angepasst. Ich habe noch nicht geprüft,
wie genau der Kreis ist.
Ist mein Algorithmus für den 2. Oktant so korrekt?
1 | WHILE x > 0
|
2 | REM Schritt in schnelle Richtung
|
3 | x = x-1 : Hier muss erst x-1 vor dx berechnet werden, sonst wird ein Schritt zu viel gemacht
|
4 | dx = 1-x*2
|
5 | fehler = fehler-dx
|
6 |
|
7 | IF fehler>0 THEN
|
8 | REM Schritt in langsame Richtung
|
9 | dy = y*2+1
|
10 | y = y+1
|
11 | fehler = fehler-dy
|
12 | END IF
|