w, h = 400, 400 rad = 3 -- radius x1, y1 = math.random(rad+2, w-rad-2), math.random(rad+2, h-rad-2) x2, y2 = math.random(rad+2, w-rad-2), math.random(rad+2, h-rad-2) pixels = {} for i=1, w*h do pixels[i] = -1 end if y1 > y2 then x1, x2, y1, y2 = x2, x1, y2, y1 end xmin, xmax = math.max(0, math.min(x1, x2)-rad), math.min(w-1, math.max(x1, x2)+rad) for y = math.max(0, math.min(y1, y2)-rad), math.min(h-1, math.max(y1, y2)+rad) do if y1 == y2 then xl, xr = xmin, xmax else -- y1 < y2 yplus = x1 < x2 and -rad or rad xl = x1+(y+yplus-y1)*(x2-x1)/(y2-y1)-rad xr = x1+(y-yplus-y1)*(x2-x1)/(y2-y1)+rad end for x = math.floor(xl+0.5), math.floor(xr+0.5) do pixels[x+y*w+1] = 0 end end