# Simple animation showing pixel vs subpixel accuracy.
# by Miloslav Ciz, released under CC0 1.0
from PIL import Image
import math
SCALE = 8
FRAMES = 64
RESOLUTION = (32,16)
img = Image.new("RGB",(RESOLUTION[0] * SCALE,RESOLUTION[1] * SCALE),"white")
pixels = img.load()
def drawLine(p0, p1):
slope = (p1[1] - p0[1]) / float(p1[0] - p0[0])
for i in range(int(p1[0] - p0[0] + 1)):
x = round(p0[0] + i) * SCALE
y = round(p0[1] + i * slope) * SCALE
for b in range(SCALE):
for a in range(SCALE):
pixels[x + a,y + b] = (0,0,0)
for f in range(FRAMES):
img.paste((255,255,255),(0,0,img.size[0],img.size[1]))
t = f / float(FRAMES) * math.pi * 2
x0 = 3
x1 = 13
y0 = 8 + math.sin(t) * 3
y1 = 7 + math.cos(t)
x0 += (RESOLUTION[0] / 2)
x1 += (RESOLUTION[0] / 2)
drawLine((x0,y0),(x1,y1))
x0 -= (RESOLUTION[0] / 2)
x1 -= (RESOLUTION[0] / 2)
y0 = round(y0)
y1 = round(y1)
drawLine((x0,y0),(x1,y1))
for i in range(RESOLUTION[1] * SCALE):
pixels[int(RESOLUTION[0] * SCALE / 2),i] = (0,0,0)
img.save("out" + str(f).zfill(2) + ".png")