Написал простенькую программку. Генерирует «сетку» из цветных квадратиков.
В принципе, может быть полезна для подбора (генерации) цветовой палитры.
Думаю также над созданием аналогичной программки, но - для треугольников, многоугольников. Нужен какой-то красивый алгоритм разбиения плоскости на многоугольники + сборка их в виде массивов координат [(x1,y1,x2,y2,...)].
Вот исходный код для квадратных мозаик:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import cairo
import sys
argc = len(sys.argv)
if (argc < 7): sys.exit()
W, NX, c1, c2, c3, filename_o = sys.argv[1:7]
W, NX, c1, c2, c3 = map(int,[W, NX, c1, c2, c3])
H = W
NY = NX
SIZEX = W/NX
SIZEY = H/NY
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, W, H)
ctx = cairo.Context(surface)
a = range(256)
r = g = b = 0 # Надо как-то стартовать не с #000000 (Black).
for i in xrange(NY):
for j in xrange(NX):
x1 = (j+0)*SIZEX
x2 = (j+1)*SIZEX
y1 = (i+0)*SIZEY
y2 = (i+1)*SIZEY
# эти выражения можно изменить (будет другой узор),
r = (g+b+c1)%256
g = (r+b+c2)%256
b = (r+g+b+c3)%256
#print r,g,b
ctx.rectangle(x1,y1,x2,y2)
ctx.set_source_rgb(r/256.0,g/256.0,b/256.0)
ctx.fill_preserve()
ctx.set_source_rgb(0,0,0)
ctx.stroke()
ctx.fill()