kelvin@cluxnei.dev:~/blog

kelvin@cluxnei:~/blog$ cat quimica-emergente.md

2026-09-13 PT ~20 min de leitura read in English

Eu não programei a água

Não existe, em lugar nenhum do código, uma linha dizendo que água é H₂O. O que existe é a regra do octeto. A água é o que a regra do octeto produz. Este texto abre uma simulação de ligações químicas e mostra três modelos de ligação que não são rótulos sobre a mesma física: cada um muda o que os átomos fazem, e as estruturas aparecem sozinhas.

Latão, ligação metálica. Cobre e zinco. Os dois doam elétrons, então nenhuma molécula se fecha e o que cresce é uma rede. Guarde esta imagem: ela vai contrastar com as duas seções seguintes, e a única coisa que muda entre elas é a regra de ligação.

Neste texto

  1. O que é uma ligação, do começo
  2. O cenário que não faz nada
  3. Iônica: transferir
  4. Covalente: compartilhar
  5. Metálica: abrir mão
  6. A geometria que separa os três
  7. Quem pode sequer reagir
  8. 3D sem WebGL
  9. O que esta simulação não é

O que é uma ligação, do começo

Toda a simulação roda sobre uma força só, a mesma que segura um ímã na geladeira e que mantém o elétron preso ao núcleo: a atração eletrostática. A lei de Coulomb tem a forma exata da gravitação de Newton, trocando massa por carga:

F= k q1⁢q2 r2

q são as cargas e k a constante de Coulomb. Cargas opostas se atraem, iguais se repelem, e a intensidade cai com o quadrado da distância. Na simulação o k é ajustado, porque o objetivo é enxergar a química acontecer em segundos, não em escala real.

Só que carga elétrica não explica por que o sódio quer dar um elétron e o cloro quer receber. Isso vem da camada de valência: a camada eletrônica mais externa de um átomo. Átomos se comportam como se quisessem essa camada completa, o que quase sempre significa oito elétrons. É a regra do octeto.

Dessa regra sai o número que o código chama de tendência: quantos elétrons faltam ou sobram para completar a camada. O sinal dela decide tudo o que vem a seguir.

tendência > 0   quer receber    não-metais: H, O, N, C, Cl
tendência < 0   quer doar       metais: Na, Cu, Zn, Al
tendência = 0   não quer nada    gases nobres: He, Ne, Ar, Kr, Xe, Rn

Um átomo não escolhe um modelo de ligação: o modelo decorre de quem está encostando em quem. Dois que querem receber compartilham. Um que quer doar e outro que quer receber transferem. Dois que querem doar não têm o que trocar entre si, e o que resolve é um terceiro arranjo.

São esses três arranjos que a simulação implementa, e é aqui que ela deixa de ser só iônica.

O cenário que não faz nada

Antes de olhar o que acontece, vale olhar o que não acontece. Um dos dez cenários é o dos gases nobres, hélio até radônio, e ele não faz absolutamente nada. Os átomos se chocam e quicam, e é só.

Gases nobres. Nenhuma ligação se forma, em nenhum dos três modelos. Não há um único par conectado na tela, e é isso que a química prevê.

O detalhe que importa: isso não é um caso especial no código. Não existe um if (gasNobre) return; em lugar nenhum. A elegibilidade de cada modelo é uma pergunta só, feita sobre a tendência:

iônica     exige   tendência ≠ 0
covalente  exige   tendência > 0
metálica   exige   tendência < 0

Um gás nobre tem tendência exatamente zero. Ele falha nos três por consequência aritmética, não por exceção escrita à mão. O nada é emergente do mesmo jeito que as moléculas são, e é por isso que ele serve de prova: se a regra estivesse errada, alguma coisa ligaria aqui.

Por que começar pelo negativo. Uma simulação que produz estruturas bonitas pode estar produzindo estruturas bonitas e erradas. Um caso em que ela tem que se recusar a fazer qualquer coisa é mais difícil de falsear por acidente do que um caso em que ela tem que fazer algo.

Iônica: transferir

O sódio tem um elétron sobrando na camada externa. O cloro tem uma vaga. O sódio entrega, o cloro aceita, e agora os dois estão eletricamente carregados em sinais opostos:

Na+Cl ⟶ Na+ + Cl−

Há transferência real de elétron no modelo: a carga líquida dos dois muda, e a partir daí é a lei de Coulomb lá de cima que segura o par.

E aqui aparece a primeira consequência que ninguém programou. Assim que o sódio entrega seu elétron, a tendência dele vira zero. Ele deixa de ser elegível para uma segunda ligação iônica. O mesmo vale para o cloro, que completou a camada.

Ou seja: a ligação iônica satura sozinha. O sal não cresce numa rede, ele para no par.

Sal de cozinha, ligação iônica. Unidades pequenas e saturadas espalhadas pela caixa. Compare com o latão lá do começo: mesma engine, mesma força, outra regra.

Covalente: compartilhar

Quando os dois átomos querem receber, ninguém transfere nada. Cada ligação vira um par compartilhado que conta para o octeto dos dois ao mesmo tempo. A carga líquida fica em zero, porque nenhum elétron mudou de dono:

2⁢H +O ⟶ H2 O

Dois hidrogênios e um oxigênio. Não porque alguém escreveu "água", mas porque o oxigênio tem duas vagas e o hidrogênio tem uma.

Esta é a parte que me deixou mais satisfeito ao ver funcionando. O limite de quantas ligações cada átomo aceita não está numa tabela. Ele é lido da tendência, que é a própria contagem de vagas do octeto:

capacidade covalente = tendência

Uma linha de código. E dela cai a valência inteira:

H  1 vaga   →  1 ligação
O  2 vagas  →  2 ligações
N  3 vagas  →  3 ligações
C  4 vagas  →  4 ligações

Esses são os números que todo mundo decora na escola. Aqui eles não foram escritos: são a mesma variável que já existia para decidir quem doa e quem recebe, lida de outro jeito.

Água, ligação covalente. Grupos de dois e três átomos, e nada maior. O oxigênio pega dois hidrogênios e fecha; o hidrogênio pega um e fecha. A saturação vem do octeto, não de um limite arbitrário.

Metálica: abrir mão

Dois metais encostados têm um problema: os dois querem doar. Não há transferência possível e não há par para compartilhar. A saída da natureza é outra: os elétrons de valência simplesmente saem de cena, formando um mar deslocalizado que pertence ao conjunto, e os núcleos viram cátions imersos nele.

n⁢Cu ⟶ n⁢ Cu+ + n⁢ e−

Os elétrons não vão para um átomo específico: vão para o conjunto. É por isso que metal conduz eletricidade e é maleável.

A consequência estrutural é a mais dramática das três. Como a ligação não é direcional e não tem limite de coordenação, todo metal que encostar entra no mesmo agregado. Não existe "molécula de latão". Existe uma rede que cresce enquanto houver átomo disponível.

É exatamente o que o vídeo lá do início mostra, e é o oposto do sal, que satura no par. A diferença entre as duas telas é uma pergunta sobre o sinal da tendência.

Há um detalhe fino no código que vale citar, porque é fácil errar: a elegibilidade metálica olha a tendência do átomo neutro, não a atual. O cátion que já cedeu seus elétrons tem tendência zero e, mesmo assim, continua fazendo parte da rede. Se a checagem fosse sobre a tendência atual, o mar de elétrons se desmontaria no instante em que começasse a funcionar.

A geometria que separa os três

Cada modelo também tem uma geometria própria, e ela não é enfeite: é o que faz as três telas parecerem diferentes mesmo antes de você contar quantos átomos há em cada grupo.

modelocomprimento de repousorigideztolerância
covalente0,720,220,6
metálica0,920,052,5
iônica1,000,081,5

O comprimento é medido em frações da distância de contato entre os dois átomos. Lendo a tabela como química:

Quem pode sequer reagir

Um cenário joga a tabela periódica inteira numa caixa só. Ele é útil para mostrar uma coisa que os cenários dedicados escondem: o modelo de ligação não muda só como os átomos se juntam, ele muda quem tem permissão de participar.

Sopa periódica sob ligação iônica: muitos agregados formados
Sopa periódica, iônica. A iônica aceita qualquer átomo com tendência diferente de zero, ou seja, quase todo mundo menos os gases nobres.
Sopa periódica sob ligação metálica: a tela fica mais vazia
A mesma sopa, metálica. A tela fica mais vazia, não mais cheia. A metálica só aceita metais, e numa amostra da tabela inteira eles são minoria. Os não-metais ficam soltos porque não têm com quem reagir sob esta regra.

Isso me custou uma tentativa fracassada ao montar este post. Eu queria usar a sopa como comparação controlada dos três modelos, mas ela mistura duas variáveis: quem pode ligar e como a estrutura cresce. A imagem sugeriria que a metálica agrega menos, quando na verdade ela agrega muito mais, só que com menos átomos elegíveis. Os cenários dedicados existem justamente para isolar uma coisa de cada vez.

3D sem WebGL

A simulação tem modo 3D, e ele não usa three.js nem WebGL. O arquivo engine3d.js projeta a cena à mão sobre o mesmo <canvas> 2D de sempre.

A matemática é a perspectiva clássica: um ponto no espaço da câmera é dividido pela própria profundidade, e quanto mais longe, menor ele fica.

k= FOCvz x′= k⁢vx y′= k⁢vy

FOC é a distância focal e v o ponto já no espaço da câmera. Pontos com vz abaixo do plano próximo são descartados, senão a divisão explode e o objeto aparece invertido atrás da câmera.

O resto é uma base ortonormal montada por quadro, ordenação por profundidade para desenhar de trás para frente, e um teto de área no backbuffer.

São algumas centenas de linhas. Poderiam ser uma linha de import * as THREE, e o motivo de não serem é o mesmo motivo de o projeto existir: a graça é entender a conta. Vale registrar o contraste com a simulação do universo, que usa three.js sem pudor porque lá o problema difícil era a física, não o desenho.

O que esta simulação não é

Como no texto anterior, a parte que costuma faltar. Esta simulação não é química quântica, e a lista do que ela não faz é importante para o que ela afirma.

O que ela faz, e o que este post defende, é outra coisa: mostrar que três regras simples sobre uma variável só, a tendência, produzem sozinhas a saturação do sal, a valência da água e a rede do latão. É um argumento sobre emergência, não uma previsão quantitativa.

Como saber se não é sorte

Todo cenário é semeado. A mesma semente dá a mesma cena, em 2D e em 3D, o que torna o comportamento discutível em vez de anedótico. E há 50 testes em três arquivos, no test runner do próprio Node, sem framework:

arquivotestescobre
bonding.test.mjs25os três modelos produzem química diferente, a invariante z === 0 em 2D, determinismo da semente
chemistry.test.mjs12valência, tendência e octeto contra a tabela periódica
physics.test.mjs13forças de Coulomb, colisões elásticas, energia nas paredes

Um deles me parece o mais honesto do conjunto: "trocar de tipo de ligação recalcula a química do átomo". Ele existe para garantir que os três modelos não sejam três aparências da mesma coisa.

Nota sobre os vídeos. Foram capturados em renderização por software, que escurece bastante a cena. Todos passaram pelo mesmo ajuste de níveis, sem recorte. A física não foi tocada.

A simulação está em cluxnei.dev/atomic-ionic-reactions/, roda inteira no navegador e aceita trocar cenário, modelo de ligação e semente antes de começar. O código está no GitHub.

kelvin@cluxnei:~/blog$