mod: ядро (07) Размеры точки с перекрытием

This commit is contained in:
2026-09-03 01:11:54 +03:00
parent 05c3e62ed5
commit 1b4115f62e
+18 -9
View File
@@ -117,10 +117,10 @@ def generate_halftone_svg(
- seed: сид для детерминированного распределения анимаций - seed: сид для детерминированного распределения анимаций
TODO ПОЧИНИТЬ-УЛУЧШИТЬ: TODO ПОЧИНИТЬ-УЛУЧШИТЬ:
- max_radius (радиус точки): сейчас зазор между точками не меняется. Нужно чтобы: ПОЧИНИЛИ ДЛЯ ПРОСТЫХ ФИГУР - max_radius (радиус точки):
- при d=0 -- зазор 10 - шаг ячейки STEP = 20, базовый радиус R0 = 10
- при d<10 -- зазор 10-d - при d=0 .. 10 -- зазор между точками
- при d>10 -- перекрытие d-10 (отрицательный зазор) - при d>10 -- перекрытие и наползание точек
- angle: сейчас это просто поворот картинки. Нужно чтобы: - angle: сейчас это просто поворот картинки. Нужно чтобы:
- нужно чтобы это был поворт картинки (т.е. ряды-столбцы были со смещение-поворотом, как при полиграфии) - нужно чтобы это был поворт картинки (т.е. ряды-столбцы были со смещение-поворотом, как при полиграфии)
- blink: что-то страннное. пока не понял - blink: что-то страннное. пока не понял
@@ -161,9 +161,18 @@ def generate_halftone_svg(
img_resized = img.resize((grid_width, grid_height), Image.Resampling.LANCZOS) img_resized = img.resize((grid_width, grid_height), Image.Resampling.LANCZOS)
step = max_radius * 2 + 2 # Базовый шаг ячейки сетки (номинальный радиус касания точек R0 = 10, диаметр D0 = 20)
width = grid_width * step STEP = 20
height = grid_height * step
# Расчет запаса/паспарту (margin) по краям холста:
# Учитывает увеличенный радиус точек (при наползании) и масштабирование при пульсации/повороте
scale_val = max(0.5, min(1.5, scale / 1000.0))
max_effective_radius = max_radius * max(1.0, scale_val)
max_visual_extent = math.ceil(max_effective_radius * 1.42) + 2
margin = max(4, max_visual_extent - STEP // 2 + 2)
width = grid_width * STEP + 2 * margin
height = grid_height * STEP + 2 * margin
# 2. Формирование классов анимации # 2. Формирование классов анимации
animation_classes = [] animation_classes = []
@@ -195,8 +204,8 @@ def generate_halftone_svg(
if radius == 0: if radius == 0:
continue continue
cx = x * step + step // 2 cx = margin + x * STEP + STEP // 2
cy = y * step + step // 2 cy = margin + y * STEP + STEP // 2
anim_class = rng.randint(0, animation_variants - 1) anim_class = rng.randint(0, animation_variants - 1)
encoded_class = encode_to_base36(anim_class) encoded_class = encode_to_base36(anim_class)