Xiaolin Wu's line algorithm: Difference between revisions
Content added Content deleted
(Added Julia language) |
|||
Line 883: | Line 883: | ||
} |
} |
||
}</lang> |
}</lang> |
||
=={{header|Julia}}== |
|||
{{works with|Julia|0.6}} |
|||
<lang julia>using Images |
|||
fpart(x) = mod(x, one(x)) |
|||
rfpart(x) = one(x) - fpart(x) |
|||
function drawline!(img::Matrix{Gray{N0f8}}, x0::Integer, y0::Integer, x1::Integer, y1::Integer) |
|||
steep = abs(y1 - y0) > abs(x1 - x0) |
|||
if steep |
|||
x0, y0 = y0, x0 |
|||
x1, y1 = y1, x1 |
|||
end |
|||
if x0 > x1 |
|||
x0, x1 = x1, x0 |
|||
y0, y1 = y1, y0 |
|||
end |
|||
dx = x1 - x0 |
|||
dy = y1 - y0 |
|||
grad = dy / dx |
|||
if iszero(dx) |
|||
grad = oftype(grad, 1.0) |
|||
end |
|||
# handle first endpoint |
|||
xend = round(Int, x0) |
|||
yend = y0 + grad * (xend - x0) |
|||
xgap = rfpart(x0 + 0.5) |
|||
xpxl1 = xend |
|||
ypxl1 = floor(Int, yend) |
|||
if steep |
|||
img[ypxl1, xpxl1] = rfpart(yend) * xgap |
|||
img[ypxl1+1, xpxl1] = fpart(yend) * xgap |
|||
else |
|||
img[xpxl1, ypxl1 ] = rfpart(yend) * xgap |
|||
img[xpxl1, ypxl1+1] = fpart(yend) * xgap |
|||
end |
|||
intery = yend + grad # first y-intersection for the main loop |
|||
# handle second endpoint |
|||
xend = round(Int, x1) |
|||
yend = y1 + grad * (xend - x1) |
|||
xgap = fpart(x1 + 0.5) |
|||
xpxl2 = xend |
|||
ypxl2 = floor(Int, yend) |
|||
if steep |
|||
img[ypxl2, xpxl2] = rfpart(yend) * xgap |
|||
img[ypxl2+1, xpxl2] = fpart(yend) * xgap |
|||
else |
|||
img[xpxl2, ypxl2 ] = rfpart(yend) * xgap |
|||
img[xpxl2, ypxl2+1] = fpart(yend) * xgap |
|||
end |
|||
# main loop |
|||
if steep |
|||
for x in xpxl1+1:xpxl2-1 |
|||
img[floor(Int, intery), x] = rfpart(intery) |
|||
img[floor(Int, intery)+1, x] = fpart(intery) |
|||
intery += grad |
|||
end |
|||
else |
|||
for x in xpxl1+1:xpxl2-1 |
|||
img[x, floor(Int, intery) ] = rfpart(intery) |
|||
img[x, floor(Int, intery)+1] = fpart(intery) |
|||
intery += grad |
|||
end |
|||
end |
|||
return img |
|||
end |
|||
img = fill(Gray(1.0N0f8), 250, 250); |
|||
drawline!(img, 8, 8, 192, 154)</lang> |
|||
=={{header|Kotlin}}== |
=={{header|Kotlin}}== |