Hallo,
ich hab in der Mittagspause mal schnell in Pseudocode skizziert,
wie ich mir so eine Line-Routine vorstelle.
Müsste eigentlich funktionieren.
Die Linien sind allerdings noch nicht balanciert,
da war noch ein Trick nötig, der mir jetzt auf
die Schnelle nicht einfällt.
Code:
;Drawline in Pseudocode.
;-----------------------
;Übergeben werden die Start- und Endpunkte der Linie xs,ys und ys,ye
;Die Routine braucht nur Addition /Subtrktion, kommt ohne Multiplikation / Division aus.
;Alle Variable könne Byte sein.
;Kann problemlos und einfach in Assembler kodiert werden.
Drawline(xs,ys,ys,ye)
;Längen für x und y ausrechnen
xlen=xs-xe
ylen=ys-ye
;Schrittrichtung für x und Y festlegen
if xlen>=0 then xa=1 else xa=-1
if ylen>=0 then ya=1 else ya=-1
;wenn xlänge grösser ist, dann laufen wir an der X-Achse entlang
; ansonsten an der Y-Achse
if abs(xlen) < abs(ylen) then goto walky
walkx:
temp=xlen
do
portx=xs
porty=ys
xs=xs+xa :immer einen Schritt in x-Richtung weiter
temp=temp-ylen ;Schritt in Y-Richtung nötig ?
if temp<=0 then ;wenn <=0 dann ja
temp=temp+xlen ;
ys=ys+ya ;Schritt in Y-Richtung
endif
loop until xs=xe ;Wiederholen bis Ende der Linie
Return ;Ende sub
WalkY:
temp=ylen
do
portx=xs
porty=ys
ys=ys+ya
temp=temp-xlen
if temp<0 then
temp=temp+ylen
xs=xs+xa
endif
loop until ys=ye
return
Schau dirs halt mal an...
Ich denke immer noch über die Hardwarelösung nach,
wo die Linie auf dem Scope mittels zweier Integratoren
automatisch gezogen wird.
Gruß Jan
Lesezeichen