Initial commit

This commit is contained in:
user
2026-07-12 14:06:45 +04:00
commit a75028d68f
148 changed files with 3275 additions and 0 deletions
@@ -0,0 +1,33 @@
from __future__ import annotations
import numpy as np
class ChessboardGenerator:
"""Шахматная доска произвольного размера и каналов."""
@staticmethod
def make(size: int = 512, channels: int = 3, tile: int = 32) -> np.ndarray:
"""Создать шахматку size×size; для RGB каждый квадрат случайного цвета."""
if size <= 0:
raise ValueError("size должен быть > 0.")
if channels not in (1, 3):
raise ValueError("channels должен быть 1 или 3.")
if tile <= 0 or size % tile != 0:
raise ValueError("tile должен быть > 0 и делить size без остатка.")
n = size // tile # число клеток по стороне
if channels == 1:
base = (np.add.outer(np.arange(n), np.arange(n)) % 2).astype(np.uint8) * 255
return np.kron(base, np.ones((tile, tile), dtype=np.uint8))
# RGB: случайный цвет на каждую клетку (uint8)
rng = np.random.default_rng()
colors = rng.integers(0, 256, size=(n, n, 3), dtype=np.uint8)
# Апсемплинг каждой компоненты по плитке
r = np.kron(colors[:, :, 0], np.ones((tile, tile), dtype=np.uint8))
g = np.kron(colors[:, :, 1], np.ones((tile, tile), dtype=np.uint8))
b = np.kron(colors[:, :, 2], np.ones((tile, tile), dtype=np.uint8))
return np.stack([r, g, b], axis=-1)