Xiaolin Wu's line algorithm: Difference between revisions

Content deleted Content added
mNo edit summary
Line 36:
dy = y2 - y1
gradient = dy / dx
if abs(dx) > abs(dy) then
''// handle second"horizontal" endpointlines''
''// handle first endpoint''
xend = round(x1)
yend = y1 + gradient * (xend - x1)
xgap = rfpart(x1 + 0.5)
xpxl1 = xend '' // this will be used in the main loop''
ypxl1 = ipart(yend)
plot(xpxl1, ypxl1, rfpart(yend) * xgap)
plot(xpxl1, ypxl1 + 1, fpart(yend) * xgap)
intery = yend + gradient ''// first y-intersection for the main loop''
''// handle second endpoint''
xend = round(x2)
yend = y2 + gradient * (xend - x2)
xgap = fpart(x2 + 0.5)
xpxl2 = xend '' // this will be used in the main loop''
ypxl2 = ipart(yend)
plot(xpxl2, ypxl2, rfpart(yend) * xgap)
plot(xpxl2, ypxl2 + 1, fpart(yend) * xgap)
''// handle firstmain endpointloop''
'''for''' x '''from''' xpxl1 + 1 '''to''' xpxl2 - 1 '''do'''
xend = round(x1)
plot(x, ipart(intery), rfpart(intery))
yend = y1 + gradient * (xend - x1)
xgap = rfpart(x1 + 0.5)
xpxl1 = xend '' // this will be used in the main loop''
ypxl1 = ipart(yend)
plot(xpxl1, ypxl1, rfpart(yend) * xgap)
plot(xpxl1, ypxl1 + 1, fpart(yend) * xgap)
intery = yend + gradient ''// first y-intersection for the main loop''
''// handle second endpoint''
xend = round(x2)
yend = y2 + gradient * (xend - x2)
xgap = fpart(x2 + 0.5)
xpxl2 = xend '' // this will be used in the main loop''
ypxl2 = ipart(yend)
plot(xpxl2, ypxl2, rfpart(yend) * xgap)
plot(xpxl2, ypxl2 + 1, fpart(yend) * xgap)
''// main loop''
'''for''' x '''from''' xpxl1 + 1 '''to''' xpxl2 - 1 '''do'''
plot(x, ipart(intery), rfpart(intery))
plot(x, ipart(intery) + 1, fpart(intery))
intery = intery + gradient
'''repeat'''
 
else
''//handle "vertical" lines same code as above but X takes the role of Y
 
'''end function'''
</code>