Урок 4. Треугольник Серпинского: фрактал из десяти вентилей

В картинках

После этого урока на экране появится настоящий фрактал — треугольник Серпинского: большой треугольник из трёх таких же, каждый из них — из трёх ещё меньших, и так до отдельной точки. А логики для него — шесть AND и дерево OR.


4.1. Идея: ни одного общего разряда

Точка (x, y) горит, если у x и y нет ни одного общего разряда с единицей: (x AND y) = 0.

000000001001010010011011100100101101110110111111xy101 AND 010 = 000(5, 2) — горит101 AND 100 = 100(5, 4) — не горит
Правило на экране 8 × 8: точка горит, если у x и y нет общего разряда с единицей. Уже на трёх разрядах видно треугольник из трёх треугольников.

Почему получается треугольник? Посмотри на старший разряд. Если он 1 у x — точка в правой половине, у y — в нижней. Обе единицы сразу запрещены, поэтому правый нижний квадрат пустой, а в трёх остальных — то же правило для пяти младших разрядов, то есть та же картинка вдвое меньше. И так шесть раз.

2 × 24 × 48 × 816 × 1664 × 64каждая картинка — три копии предыдущей
Треугольник Серпинского растёт ступенями: добавили разряд — экран вдвое больше, а картинка — три копии прежней. На 64 × 64 ступеней шесть и горит 3⁶ = 729 точек.

Тот же узор даёт треугольник Паскаля, если закрасить в нём нечётные числа, — так его и находили задолго до компьютеров.

4.2. Сборка

Тот же проект, что урок 3: развёртка, два CNT6 и экран остаются. Меняется только узор — логика, которая решает, гореть ли точке (x, y).

Идея. Точка горит, если у x и y нет ни одного общего разряда с единицей: (x AND y) = 0.

xyx AND yТочка
5 = 0001012 = 000010000000горит
5 = 0001014 = 000100000100не горит
12 = 0011003 = 000011000000горит

Из этого простого правила вырастает треугольник Серпинского: большой треугольник состоит из трёх таких же, только вдвое меньше, а каждый из них — ещё из трёх… На экране 64 × 64 таких ступеней шесть — по числу разрядов, и горит 3⁶ = 729 точек. Тот же узор даёт треугольник Паскаля, если закрасить в нём нечётные числа.

Как это собрать: 6 AND — по одному на разряд, «единица в этом разряде у обоих». Если хоть один AND горит, точка гаснет: все шесть собираем деревом OR, а последним ставим NOR — он сразу и собирает, и переворачивает.

Шаг 1. Убрать старый узор

Что удалитьКак найти
XOR (узор)выход которого = pix

У метки pix должен остаться один источник — новый NOR. Два источника на одной метке — замыкание.

Шаг 2. Узор Серпинского

ДетальНогаМетка
AND (разряд 0)I0
I1
O0
x0
y0
a0
AND (разряд 1)I0
I1
O0
x1
y1
a1
AND (разряд 2)I0
I1
O0
x2
y2
a2
AND (разряд 3)I0
I1
O0
x3
y3
a3
AND (разряд 4)I0
I1
O0
x4
y4
a4
AND (разряд 5)I0
I1
O0
x5
y5
a5
ORI0
I1
O0
a0
a1
o01
ORI0
I1
O0
a2
a3
o23
ORI0
I1
O0
a4
a5
o45
ORI0
I1
O0
o01
o23
o03
NOR (точка)I0
I1
O0
o03
o45
pix

4.3. Проверка

№Что сделатьЧто видно
1RST = 1, один такт, RST = 0; генератор 4kHz или быстреекадр рисуется заново
2дождаться конца кадрапрямоугольный треугольник: прямой угол слева вверху, внутри — три треугольника поменьше, в каждом ещё три…
3присмотрись к углу 8 × 8 слева вверхутам тот же треугольник, только маленький — это и есть фрактал: часть похожа на целое

Если треугольник «рваный» или в нём лишние точки — проверь пары у AND: в каждом AND разряды x и y одного номера. Если экран весь тёмный — проверь, что XOR (узор) удалён, а pix выходит из NOR.


Вставка урока 4 (Cmd+I)

Перед вставкой удали XOR (узор), выход которого = pix: у pix должен остаться один источник.

# Урок 4 — треугольник Серпинского: точка горит, если (x AND y) = 0 — ни в одном разряде нет двух единиц сразу.# Вставка: Cmd+I поверх урока 3. Перед вставкой удали XOR (узор), выход которого = pix: у pix должен остаться один источник. # --- 6 AND: единица в одном разряде x и y сразу ---AND(x0, y0, a0)AND(x1, y1, a1)AND(x2, y2, a2)AND(x3, y3, a3)AND(x4, y4, a4)AND(x5, y5, a5)# --- хоть одна такая пара — точка не горит: OR деревом, в конце NOR ---OR(a0, a1, o01)OR(a2, a3, o23)OR(a4, a5, o45)OR(o01, o23, o03)NOR(o03, o45, pix)

Не получается? Что-то не работает →