Bitmap/Bresenham's line algorithm: Difference between revisions
Content added Content deleted
m (→{{header|Nim}}) |
m (→{{header|Phix}}: minor tidy) |
||
Line 2,795:
=={{header|Phix}}==
Modified copy of [[Bitmap/Bresenham%27s_line_algorithm#Euphoria|Euphoria]], with a bigger bitmap and a simpler pattern.
Requires new_image() from [[Bitmap#Phix|Bitmap]], write_ppm() from [[Bitmap/Write_a_PPM_file#Phix|Write_a_PPM_file]]. <br>
<lang Phix>-- demo\rosetta\Bresenham_line.exw (runnable version)
<lang Phix>function bresLine(sequence screenData, integer x0, integer y0, integer x1, integer y1, integer colour)▼
deltaY = abs(y1-y0),▼
stepX = iff(x0<x1,1,-1),▼
stepY = iff(y0<y1,1,-1),▼
lineError = iff(deltaX>deltaY,deltaX,-deltaY),▼
prevle▼
▲
lineError = round(lineError/2,1)▼
integer dimx
▲ deltaY = abs(y1-y0),
▲ stepX = iff(x0<x1,1,-1),
▲ stepY = iff(y0<y1,1,-1),
▲ lineError = iff(deltaX>deltaY,deltaX,-deltaY),
▲ prevle
▲ lineError = round(lineError/2, 1)
while true do
if x0>=1 and x0<=dimx
and y0>=1 and y0<=dimy then
image[x0][y0] = colour
end if
if x0=x1 and y0=y1 then exit end if
Line 2,823 ⟶ 2,826:
end if
end while
return
end function
--include ppm.e -- red, green, blue, white, new_image(), write_ppm(), bresLine() (as distributed, instead of the above)
sequence screenData = new_image(400,300,black)
|