kelvin@cluxnei:~/blog$ cat quimica-emergente.md
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.
Neste texto
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:
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ó.
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.
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:
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.
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:
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:
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.
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.
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.
| modelo | comprimento de repouso | rigidez | tolerância |
|---|---|---|---|
| covalente | 0,72 | 0,22 | 0,6 |
| metálica | 0,92 | 0,05 | 2,5 |
| iônica | 1,00 | 0,08 | 1,5 |
O comprimento é medido em frações da distância de contato entre os dois átomos. Lendo a tabela como química:
- A covalente é a mais curta e de longe a mais rígida, com a menor folga. Compartilhar um par de elétrons puxa os núcleos para perto e não deixa a ligação balançar. É por isso que ela é direcional e produz moléculas com forma definida.
- A metálica é a mais frouxa das três, com rigidez
0,05e tolerância2,5. Os átomos deslizam uns sobre os outros sem romper a ligação. Isso é maleabilidade, que é literalmente a propriedade de deformar metal sem quebrá-lo. - A iônica fica no meio, e repousa exatamente na distância de contato.
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.
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.
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.
- Não há orbitais. A regra do octeto está implementada como contagem de vagas, não como preenchimento de níveis de energia. Não existe hibridização, e portanto os ângulos de ligação da água ou do metano não saem certos por construção.
- Não há energia de ligação real. A rigidez é um parâmetro de mola ajustado para a cena parecer certa, não uma entalpia em kJ/mol.
- Não há temperatura de verdade. O cenário tem um parâmetro que ajusta velocidades iniciais, mas não existe equilíbrio térmico nem distribuição de Maxwell-Boltzmann.
- Os raios são fixos por elemento e não respondem ao estado de ionização, embora na realidade um cátion encolha bastante ao perder a camada externa.
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:
| arquivo | testes | cobre |
|---|---|---|
bonding.test.mjs | 25 | os três modelos produzem química diferente, a invariante z === 0 em 2D, determinismo da semente |
chemistry.test.mjs | 12 | valência, tendência e octeto contra a tabela periódica |
physics.test.mjs | 13 | forç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.
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$