2 pontos por GN⁺ 2025-05-23 | 1 comentários | Compartilhar no WhatsApp
  • Depois de deixar na parede por 12 anos um padrão de cópia de quadrados desenhado em papel quadriculado no ensino fundamental II, o autor o analisa como um fractal chamado wallflower, conectando-o a L-Systems, álgebra linear, sistemas numéricos e generalizações em dimensões mais altas
  • Começando com um quadrado e copiando a forma atual para cima, baixo, esquerda e direita, e na etapa seguinte copiando na direção girada em cerca de 27 graus, obtém-se um fractal que preenche o plano
  • As regras simples de L-System R → RLR, L → RLL geram um contorno parecido, mas não a mesma figura; formas mais conhecidas já estão documentadas como Quadratic von Koch island, Quadratic Flake e Minkowski Sausage
  • O wallflower pode ser interpretado como um sistema numérico baseado em matrizes usando a matriz (M=\begin{bmatrix}-2&1\1&2\end{bmatrix}) como base e vetores de direção como dígitos, e (\det(M)=-5) inverte a orientação a cada repetição
  • A generalização em 3D ficou estranha por problemas de simetria e sobreposição, e em 4D foi possível criar um orthotopeflower com uma matriz que satisfaz as condições, mas sob as mesmas restrições parecem ser possíveis apenas 1D, 2D e 4D

O começo do fractal que estava preso na parede

  • No ensino fundamental II, o autor fez um rabisco em papel quadriculado unindo e copiando quadrados repetidamente, e depois o deixou preso na parede para analisá-lo mais tarde
  • Por causa da estrutura que se espalha como pétalas e da história de ter ficado muito tempo na parede, esse fractal foi chamado de wallflower
  • O procedimento desenhado originalmente era o seguinte
    • Começar com um único quadrado
    • Colocar 4 cópias do estado atual à esquerda, à direita, acima e abaixo
    • Em seguida, colocar 4 cópias do estado atual nas mesmas quatro direções, mas inclinadas em cerca de 27 graus no sentido horário
    • Repetir alternadamente esses dois arranjos até preencher a folha de papel quadriculado
  • Assim como a Gosper Curve, ao repetir esse processo é possível cobrir qualquer região arbitrária do plano, e cada estado intermediário também pode ladrilhar o plano

Quase igual a um L-System, mas com contorno diferente

  • Cerca de um ano atrás, o autor percebeu que esse contorno poderia ser gerado com um L-System
  • As regras usadas consistiam apenas em rotações de 90 graus para a direita (R) e para a esquerda (L)
    • A string inicial é (RRRR)
    • Em cada iteração, faz-se a substituição (R \rightarrow RLR), (L \rightarrow RLL)
  • As primeiras etapas pareciam ter o mesmo contorno do wallflower, mas ao criar uma animação foi confirmado que, a partir da 4ª iteração, os dois métodos passam a divergir
  • A diferença vem da forma como as cópias são posicionadas
    • No método “drag and drop”, as cópias da 3ª iteração são colocadas diretamente acima, abaixo, à esquerda e à direita em relação ao centro
    • No método de L-System, as cópias são colocadas nas direções diagonais
  • A forma gerada pelo L-System já está documentada em vários lugares
  • Já a variação drag and drop que estava na parede não foi encontrada em buscas no Google Imagens nem explorando a Wikipedia
  • Foi encontrada a regra (L \rightarrow RLR), (R \rightarrow LLR) adequada ao wallflower, mas ela produz o efeito de inverter a direção em que o contorno é desenhado a cada etapa

Como contar o fractal

  • Como o wallflower cresce a partir da origem para fora, ele pode ser visto como uma correspondência entre números naturais e coordenadas de grade
  • O quadrado central é definido como 0, e os 4 quadrados ao redor adicionados na primeira iteração são numerados 1, 2, 3 e 4 no sentido horário
  • Na iteração seguinte, seria possível numerar varrendo de cima para baixo e da esquerda para a direita, mas esse método não combina bem com a estrutura recursiva
  • Aproveitando o fato de que cada pétala é uma cópia da iteração anterior, é possível reutilizar a numeração do centro para fora tanto dentro das pétalas quanto entre elas
  • Nessa numeração, os múltiplos de 5, os valores (5n+1), os múltiplos de 25 etc. formam padrões de grade inclinados
  • O motivo é que a quantidade de quadrados em cada iteração cresce como (1, 5, 25, 125, ...)
    • Em cada repetição, 4 cópias são adicionadas ao estado anterior, totalizando um fator de 5 vezes
    • Por isso, potências de 5 e a representação em base 5 combinam bem com a estrutura

Um sistema numérico que usa matriz como base

  • Ao decompor um número como se fossem casas de um número em base 5, é possível somar os vetores correspondentes a cada casa para encontrar sua posição na grade do fractal
  • Por exemplo, 231 pode ser visto como (200 + 30 + 1), e somando os vetores de posição de cada parcela obtém-se a posição de 231
  • Os valores de um dígito são definidos como vetores de direção
    • (\vec{0}=(0,0))
    • (\vec{1}=(1,0))
    • (\vec{2}=(0,1))
    • (\vec{3}=(-1,0))
    • (\vec{4}=(0,-1))
  • No início, os valores posicionais do tipo (10^n) eram expressos por fórmulas condicionais separando casos pares e ímpares, mas é possível calculá-los sem condições aplicando repetidamente uma única matriz
  • A matriz usada é a seguinte

[ M=\begin{bmatrix} -2 & 1 \ 1 & 2 \end{bmatrix} ]

  • Essa matriz satisfaz (M^2=5I), de modo que a cada duas etapas o tamanho se alinha com um fator 5
  • Portanto, pode-se escrever

[ \overrightarrow{(10^n)}=M^n\vec{1} ]

  • Em vez de um sistema posicional comum com base escalar e dígitos escalares, essa estrutura pode ser vista como um sistema numérico com base matricial e dígitos vetoriais

O determinante separa os dois fractais

  • O determinante de (M) é (\det(M)=-5), e esse determinante negativo faz a orientação do espaço se inverter a cada iteração
  • Por causa dessa inversão, em comparação com a numeração original, posições de valores como 20 e 40 parecem trocadas
  • Para evitar a inversão, pode-se escolher uma matriz com determinante positivo

[ M'=\begin{bmatrix} 2 & 1 \ -1 & 2 \end{bmatrix} ]

[ \det(M')=5 ]

  • (M') não inverte a orientação e continua girando os vetores-numéricos no sentido horário; usando essa matriz como base, reproduz-se a versão L-System mostrada antes
  • A diferença entre os dois fractais é a seguinte
    • O wallflower surge de (M), com (\det(M)=-5)
    • A família mais comum do quadratic flake surge de (M'), com (\det(M')=5)
  • O valor absoluto do determinante, 5, corresponde à estrutura em que o fractal fica 5 vezes maior a cada repetição
    • Se o determinante fosse maior, as cópias cresceriam rápido demais e surgiriam espaços vazios
    • Se o determinante fosse menor, as cópias cresceriam devagar demais e as iterações se sobreporiam
  • O ângulo de cerca de 27 graus está ligado ao vetor (\langle1,2\rangle), que surge das condições de coordenadas inteiras, determinante (\pm5) e comprimento vetorial (\sqrt5)
    • O ângulo desse vetor é (\arctan(2/1)\approx63.43^\circ)
    • Em relação ao eixo y, isso fica a cerca de 27 graus

Regras de adição e transporte

  • A soma vetorial funciona bem para valores posicionais expandidos, mas não se comporta como soma numérica comum: por exemplo, (\vec{2}+\vec{2}\neq\vec{4})
  • De 1 a 4, é mais natural pensar não em números propriamente ditos, mas em direções para cima, direita, baixo e esquerda
  • Direções opostas se anulam mutuamente
    • (\vec{1}+\vec{3}=\vec{0})
    • (\vec{2}+\vec{4}=\vec{0})
  • Ao montar uma tabela com combinações de vetores unitários, alguns resultados de soma viram valores de dois dígitos
  • Por isso, ao somar números grandes é preciso tratar o vai um como na soma longa usual
  • Como exemplo, ao calcular (\vec{22}+\vec{1}), a regra (\vec{2}+\vec{1}=\vec{13}) faz o resultado ser 133
  • O autor não prova se esse sistema de adição funciona em geral e deixa a verificação para os leitores

Sistemas numéricos relacionados e pesquisas

  • O sistema numérico do fractal wallflower se conecta a outras bases que não usam apenas números naturais como dígitos
  • Balanced Ternary usa (-1,0,1) como dígitos e 3 como base; o wallflower pode ser visto como um análogo bidimensional disso, acrescentando dígitos para as direções positiva e negativa do eixo y
  • generalized balanced ternary é generalizado para dimensões arbitrárias por grades de permutoedros, tornando-se uma grade hexagonal em 2D
  • Quater-imaginary Base é um sistema que usa (2i) como base e 0, 1, 2, 3 como dígitos
  • (M') pode ser visto como uma base correspondente ao número complexo (2+i), e Balanced base 2+i (and some gratuitous fractals), de Timothy James McKenzie Makarios, trata dessa ideia
  • O autor encontrou ainda os seguintes materiais relacionados
    • Project BinSys: um projeto para encontrar bases matriciais com determinante 2
    • Replicating Tesselations, de Andrew Vince: trata de fractais, ladrilhamentos, álgebra linear e sistemas numéricos de forma mais rigorosa e se estende para grades gerais além de (\mathbb{Z}^2)

Expandindo para 3D e 4D

  • Em 3D, o autor imaginou uma estrutura de “mais 3D”, começando com um cubo e copiando-o nas seis direções
  • As condições desejadas para a matriz 3x3 eram as seguintes
    • Todos os elementos deveriam ser inteiros
    • Cada vetor-coluna deveria ter distância de Hamming 3 a partir da origem
    • Como são adicionadas 6 cópias a cada repetição, o tamanho deveria crescer 7 vezes, então o determinante deveria ser (\pm7)
  • Foi encontrada uma matriz 3x3 que satisfazia as condições, mas a visualização mostrou uma forma achatada, com o problema de deixar a iteração anterior aparente
  • Ao adicionar duas estruturas 3D plus, foi possível preencher os espaços vazios, e os 8 pontos centrais ficaram distribuídos como vértices de um cubo torcido
  • Para uma disposição mais simétrica, talvez bastasse exigir que cada coluna fosse ortogonal às demais e tivesse o mesmo tamanho, mas em 3D isso parece impossível sob a restrição de coordenadas inteiras
  • Em 4D, as condições se encaixam
    • Basta que a soma dos quadrados dos componentes de cada coluna seja 3
    • É possível fazer isso usando 3 componentes (\pm1) e um componente 0 entre os 4 componentes
  • O seguinte arranjo 4x4 foi usado para construir o fractal 4D

[ \begin{bmatrix} 0 & -1 & -1 & -1 \ 1 & 0 & -1 & 1 \ 1 & 1 & 0 & -1 \ 1 & -1 & 1 & 0 \end{bmatrix} ]

  • Esse fractal 4D foi chamado de orthotopeflower
  • A visualização em 4D é tratada fixando o valor de (w) para ver fatias em 3D, ou representando uma janela 4D como grades 7x7 colocadas dentro de uma grade 7x7
  • Em uma janela de visualização 31x31x31x31, ele parece se expandir para fora sem o achatamento excessivo visto em 3D

Dimensões mais altas e a reviravolta final

  • Ao estender as mesmas restrições para dimensões mais altas, parece que apenas 1D, 2D e 4D satisfazem as condições
    • 1D é balanced ternary
    • 2D é wallflower ou quadratic flake
    • 4D é orthotopeflower
  • A matriz escolhida em 4D codifica o quatérnio (i+j+k), e isso sugere uma base quaternion nonária balanceada com base (i+j+k) e dígitos (0,\pm1,\pm i,\pm j,\pm k)
  • O autor não tem certeza se esse sistema com quatérnios realmente funciona e o deixa para uma versão futura de si mesmo com mais conhecimento matemático
  • O que começou como uma tentativa de recuperar o interesse por matemática e programação após o burnout acabou virando uma exploração que liga um rabisco antigo a fractais, sistemas numéricos, álgebra linear e dimensões mais altas
  • Como última reviravolta, as visualizações do texto não correspondem ao fractal real pendurado na parede
    • Na 4ª iteração do fractal real na parede, a cópia é feita em cerca de 27 graus na direção oposta
    • Na época, o autor achou que inclinar sempre para o mesmo lado faria a figura escapar dos eixos e tentou compensar isso, mas a estrutura de (M) já faz essa compensação sozinha a cada etapa
    • O texto encerra observando que Donald Knuth também já fez uma wrong turn ao pendurar um fractal na parede

1 comentários

 
GN⁺ 2025-05-23
Comentários no Hacker News
  • Foi um texto perspicaz e bem caprichado, e a visualização 3D ficou especialmente boa
    Lembrei de algo que fiz tempo atrás mexendo com decimação recursiva para criar um efeito meio fractal a partir de imagens arbitrárias
    Dá para testar aqui: https://jsfiddle.net/nicobrenner/a1t869qf/
    Basta clicar em Blursort 2x2 algumas vezes para criar frames e depois em Animate. Também dá para copiar/colar imagens, e tudo roda no navegador, sem backend. Não recomendo no celular

    • Fico curioso se isso também funcionaria em 3D
  • Fiquei obcecado com isso e acho que criei uma forma de preencher o “wallflower” com um L-system
    https://onlinetools.com/math/l-system-generator?draw=AB&skip...
    Pensando melhor, isso provavelmente gera outro fractal, mas não tenho certeza

  • Achei que seria uma leitura leve, mas tive que passar os olhos por algumas partes porque preciso trabalhar
    Pretendo voltar depois para mexer em uma coisa ou outra; é um texto muito bem feito

  • É um texto muito mais profundo e puxado do que eu esperava, dá para sentir a dedicação
    Queria perguntar ao autor: o que ele recomendaria pendurar hoje na parede do quarto de uma criança?

    • Não sou nem de longe especialista em criação de filhos, mas acho que qualquer coisa relacionada ao que desperte paixão ou encantamento na criança naquele momento é boa
      Coloquei um pequeno parágrafo sobre burnout no fim do texto. No meu caso, a raiz do problema era ter perdido o fascínio e a curiosidade que eu tinha por matemática e programação, e escrever esse texto me permitiu voltar a acessar aquele encantamento infantil que antes vinha com facilidade
  • Conferi a aritmética de dois números de dois dígitos e ela realmente funciona
    Eu esperava que 41+14 fosse dar 12. Isso porque, somando as duas casas à direita e as duas casas acima, dá duas casas à direita e duas casas acima
    Na soma longa abaixo, usei = para mostrar equivalência, isto é, rearranjo de termos (1+2=2+1), decomposição de números (41=40+1), soma de um dígito (1+4=22); usei -> quando o algoritmo fornece um dígito, e < para passar para a próxima coluna
    41+14 = (40+1)+(10+4) = 40 + 10 + (1+4) = 40 + 10 + 22 -> 1s digit = 2 < 4 + 1 + 2 = 22 + 2 = 20 + 2 + 2 = 20 + 41 -> 10s digit = 1 < 2 + 4 = 0 -> done == 12
    No texto há dois sistemas de base diferentes: em um, 10, 20, 30, 40 seguem no sentido horário; no outro, no sentido anti-horário. Em ambos, 1, 2, 3, 4 seguem no sentido horário. A soma acima usa o segundo sistema, o usado na tabela de adição, em que as dezenas seguem no sentido anti-horário
    Também funciona no outro sistema. 14+21 deve dar 12
    14+21 =10+20+42 ->2 <1+2+4 =13+4 =10+3+4 =10+31 ->1 <1+3 =0 ==12

  • Fico me perguntando como ele teve a ideia do sistema de numeração “middle out
    Quando resolvo problemas de matemática sozinho, quase nunca consigo ter esse tipo de ideia que parece inspirada

    • No texto a ordem parece um pouco diferente, mas tudo começou quando, em algum momento, percebi que a forma como o fractal cresce por um fator de 5, o sistema numérico em base 5 e a “espiral” mencionada no texto podiam se encaixar
      Também pensei bastante em como desenhar o fractal por programa, e a forma natural era começar pelo centro e ir ampliando para fora
      Há uma história sobre Richard Feynman manter no fundo da mente uma dúzia de problemas aleatórios, avançando um pouco sempre que via uma conexão, e, quando finalmente resolvia um deles, as pessoas achavam que ele tinha descoberto aquilo magicamente na hora. Este caso foi um pouco parecido, mas estou longe daquele nível, e só consegui fazer isso para um único problema, não para uma dúzia
  • No lugar onde eu trabalhava antes, tínhamos isso pendurado na parede como uma impressão grande
    https://raw.githubusercontent.com/cies/haskell-fractal/refs/... [17 MB, desculpe por ser GitHub]
    O código Haskell usado para gerar também está lá: https://github.com/cies/haskell-fractal
    Achei especialmente interessante o processo de chegar à função sharpen. Para o ajuste de curvas, usei uma ferramenta que hoje já não existe: https://github.com/cies/haskell-fractal/blob/master/fractal....
    Foi um projetinho divertido

  • Me identifiquei com a parte “decidi delegar isso ao meu eu do futuro que sabe mais matemática”
    A lista de problemas que eu precisava resolver, mas não conseguia por falta de orientação e conexão à internet, influenciou bastante até a decisão de qual diploma fazer. A maioria eram problemas de álgebra linear

  • Acho que há um erro de digitação na fórmula do padrão. A expressão logo depois de “Looking closely you might pick up on the pattern” deveria ser 5**(n/2), não 5**n, e 5**((n-1)/2), não 5**(n-1)
    \overrightarrow{10*4} é [0, 25], mas pela fórmula original sai [0, 625]
    Além disso, quanto ao erro de Knuth, nos comentários do YouTube dizem que o fractal dele na verdade está correto e que ele apenas confundiu o ponto inicial com o final. Falando de modo informal, o fractal é simétrico em relação à rotação central, e foi justamente essa rotação que Knuth considerou errada. De todo modo, ele acabou cometendo um erro relacionado a fractais, então a conclusão se mantém

    • Bem observado; corrigi a fórmula