def direct(rect, usernumber, userquantity, coordinate, dimension, seed):#наложить шум на прямоугольный кластер n = noise(usernumber, userquantity, coordinate, dimension, seed) n *= SCALE if (n == 0.0): return rect if (n > 0.0): n = math.floor(n) else: n = math.ceil(n) (width, height) = rect.size#размеры кластера pix = rect.load()#массив пикселей кластера draw = ImageDraw.Draw(rect) for i in range(width):#проход по всем пикселям кластера for j in range(height): (r, g, b) = pix[i, j] r += n; g += n; b += n if (r > 255): r = 255 elif (r < 0): r = 0 if (g > 255): g = 255 elif (g < 0): g = 0 if (b > 255): b = 255 elif (b < 0): b = 0 draw.point((i, j), (r, g, b)) return rect
(width, height) = original.size c_width = width // cluster_w c_height = height // cluster_h pix = original.load() max_seed = os.system('getMaxSignedInt') * 2 - 1#тот же seed, который использовался при наложении шума seed = 0 for i in range(width): for j in range(height): (a, b, c) = pix[i, j] seed += math.ceil((math.sin(a + b + c)**2)*(a + b + c)) seed = seed % max_seed noise_list = []#получившийся в нелегальной копии вектор шума for j_c in range(c_height): for i_c in range(c_width): rect = (cluster_w * i_c, cluster_h * j_c, cluster_w * (i_c + 1), cluster_h * (j_c + 1)) noise_list.append(diff(original.crop(rect), copy.crop(rect))) scalar_prod = []#скалярное произведение вектора шума с базисными векторами шума for i in range(userquantity): summ = 0.0 for j in range(c_width * c_height): summ += noise_list[j] * noise(i, userquantity, j, c_width * c_height, seed) scalar_prod.append(summ) print(scalar_prod)#компоненты в ортогональном базисе input()