68 lines
1.7 KiB
Python
68 lines
1.7 KiB
Python
|
import math
|
||
|
|
||
|
# # Linear
|
||
|
def diagonal():
|
||
|
def f (x, y, width, height, mark, blank):
|
||
|
if x == math.floor((y / float(height)) * width):
|
||
|
return mark()
|
||
|
else:
|
||
|
return blank()
|
||
|
|
||
|
return f
|
||
|
|
||
|
# Cross
|
||
|
def cross ():
|
||
|
def f (x, y, width, height, mark, blank):
|
||
|
pos = math.floor((y / float(height)) * width)
|
||
|
|
||
|
if x == pos or (width - 1) - pos == x:
|
||
|
return mark()
|
||
|
else:
|
||
|
return blank()
|
||
|
return f
|
||
|
|
||
|
def horizontal (position):
|
||
|
def f (x, y, width, height, mark, blank):
|
||
|
return mark() if position == y else blank()
|
||
|
return f
|
||
|
|
||
|
def vertical (position):
|
||
|
def f (x, y, width, height, mark, blank):
|
||
|
return mark() if position == x else blank()
|
||
|
return f
|
||
|
|
||
|
# Sinus
|
||
|
def sinus_vertical (period=0.2, amplitude=0.5, offset_t=0, offset=0):
|
||
|
period = (period / (math.pi * 2))
|
||
|
|
||
|
def f (x, y, width, height, mark, blank):
|
||
|
middle = (width - 1) * .5
|
||
|
to_mark = math.floor(middle + math.sin(offset_t + y / period) * amplitude)
|
||
|
return mark() if (x + offset) == to_mark else blank()
|
||
|
return f
|
||
|
|
||
|
def sinus_horizontal (period=0.2, amplitude=0.5, offset_t=0, offset=0):
|
||
|
period = (period / (math.pi * 2))
|
||
|
def f (x, y, width, height, mark, blank):
|
||
|
middle = (height - 1) * .5
|
||
|
to_mark = math.floor(middle + math.sin(offset_t + x / period) * amplitude)
|
||
|
return mark() if y + offset == to_mark else blank()
|
||
|
|
||
|
return f
|
||
|
|
||
|
def image (path, threshold=128):
|
||
|
from PIL import Image
|
||
|
|
||
|
im = Image.open(path).convert('L')
|
||
|
image_width, image_height = im.size
|
||
|
pixels = im.load()
|
||
|
|
||
|
def f (x, y, width, height, mark, blank):
|
||
|
if x < image_width and y < image_height:
|
||
|
if pixels[x, y] < threshold:
|
||
|
return mark()
|
||
|
|
||
|
return blank()
|
||
|
|
||
|
return f
|