Bardzo prosty algorytm do wyznaczania komórek Voronoia. Komórki znajdowane są na podstawie odległości wyznaczanych między losowo rozmieszczonymi punktami. W kodzie używania jest funkcja hypot.
import random
import math
from PIL import Image
import matplotlib
cmap = matplotlib.cm.get_cmap('viridis') # or Paired
imgx = 400
imgy = 300
image = Image.new("RGB", (imgx, imgy))
n=160
nx = [];ny = []; nr = []; ng = []; nb = []
for i in range(n):
nx.append(random.randint(0, imgx - 1))
ny.append(random.randint(0, imgy - 1))
r,g,b,a = cmap(i/n)
nr.append(int(r*255))
ng.append(int(g*255))
nb.append(int(b*255))
for y in range(imgy):
for x in range(imgx):
# find the closest cell center
dmin = math.hypot(imgx - 1, imgy - 1)
j = -1
for i in range(n):
d = math.hypot(nx[i] - x, ny[i] - y)
if d < dmin:
dmin = d
j = i
image.putpixel((x, y), (nr[j], ng[j], nb[j]))
for i in range(n):
image.putpixel((nx[i], ny[i]),(nr[i], ng[i], nb[i]))
image.save("./fig1.png", "PNG")
image.show()