| |
|
|
p.specht
|
'Basis XProfan11.2a free von https://xprofan.de/start.htm
Windowtitle "BRESENHAM-Algorithmus"
'Schnarch-langsam, nur für Lernzwecke geproggd von P. Specht
Windowstyle 31
Window %maxx*.81,%maxy*.81
Cls @Rgb(221,221,221)
var w%=@width(%hWnd)/2
var h%=@height(%hWnd)/2
brline(0,0, 2*w%,2*h%, @rgb(255,0,0))
brline(0,1, w%-1,2*h%, @rgb(0,255,0))
brline(3,0, 2*w%,h%-3, @rgb(0,0,255))
var i%=0
var j!=0
while i%<360
j!=i%*@pi()/180
brline(w%,h%,w%+240*cos(j!),h%+240*sin(j!),46603*i%)
inc i%,1
endwhile
Print "OK, mit LINE statt Einzelpixel setzen wär´s schneller gegangen..."
WaitInput
End
proc brline
' Bresenham-Algorithmus für Linie in beliebigem Oktanten
parameters xstart%,ystart%,xend%,yend%,c%
declare i%,el%,pdx%,pdy%,ddx%,ddy%,es%,fehler%
var x% = xstart%
var y% = ystart%
var dx% = xend%-xstart%
var dy% = yend%-ystart%
var adx% = ABS(dx%)
var ady% = ABS(dy%)' Absolutbetraege
var sdx% = int((dx%>0)-(dx%<0))' Signum-Funktion
var sdy% = int((dy%>0)-(dy%<0))
IF adx% > ady%
pdx% = sdx%
pdy% = 0
ddx% = sdx%
ddy% = sdy%
es% = ady%
el% = adx%
ELSE
pdx% = 0
pdy% = sdy%
ddx% = sdx%
ddy% = sdy%
es% = adx%
el% = ady%
ENDIF
fehler% = el%/2' el% gibt auch Anzahl der zu zeichnenden Pixel an
i%=1
while i% <= el%
fehler% = fehler% - es%
IF fehler% < 0
fehler% = fehler% + el%
x% = x% + ddx%
y% = y% + ddy%
ELSE
x% = x% + pdx%
y% = y% + pdy%
ENDIF
SETPIXEL x%,y%, x%*y%*3' oder c%, wäre Punktfarbe
inc i%
endwhile
endproc
|
|
|
| Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 04.04.2021 ▲ |
|
|
|