June 2018 Update
This commit is contained in:
parent
ba8067c3b7
commit
22f33d4004
5278 changed files with 84726 additions and 14379 deletions
|
|
@ -0,0 +1,75 @@
|
|||
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)
|
||||
Loading…
Add table
Add a link
Reference in a new issue