Olá pessoal! Hoje vou falar sobre meus experimentos com sistemas de partículas. O objetivo principal era encontrar regras simples que gerassem comportamentos interessantes.
Um exemplo clássico de um sistema com regras simples e comportamento complexo é o autômato celular, no qual eu me concentrei, tentando encontrar as regras. Obviamente, para os autômatos celulares, na maioria dos casos, as regras serão mais simples. Mas as partículas podem ser mais bonitas!
Sob o corte de muitos megabytes de gifs.
Sopa celular
Primeiro, segui os passos do jogo da “vida”: cada partícula tem um contador de “superpopulação”, que é igual à soma dos quadrados inversos das distâncias de outras partículas. Se esse contador for menor que um determinado limite, ou seja, houver poucos vizinhos, a partícula será atraída por outras partículas e, se houver muitos vizinhos, ela será repelida. Se as partículas se cruzam, elas são repelidas em qualquer caso, para não passar uma pela outra.
Espalhamos aleatoriamente partículas pelo campo e vemos o que acontece.

Curiosamente, verifica-se algo semelhante às células e parece já bastante animado. Você pode, por exemplo, adicionar mais tipos de partículas. Permita que partículas diferentes aumentem o número de vizinhos de maneiras diferentes, e algumas podem até reduzi-lo.

Agora nossas "células" tornaram-se em várias camadas.
A desvantagem de tais regras é que elas produzem estruturas bastante caóticas, não muito estáveis.
Portanto, seguimos em frente.
Jogo de recuperação
Nós mudamos as regras do jogo. Não contaremos mais os vizinhos. Deixe as partículas simplesmente atrair ou repelir, dependendo de seus tipos. Se todas as partículas são do mesmo tipo, existem apenas duas opções: todas elas se repelem ou todas se atraem.

Se houver mais tipos de partículas, então aqui você pode combinar quais serão atraídas e quais repelir.
Texto ocultoAlém da atração / repulsão, pode-se adicionar outras opções, por exemplo, para que as partículas não reajam umas às outras de maneira alguma, ou adicionar coeficientes à força de influência, mas não pude encontrar nenhum comportamento interessante nisso.
Qualquer regra pode ser representada na forma de uma matriz N * N, onde N é o número de tipos de partículas, e em cada célula existe atração ou repulsão. A atração é denotada por 0 e a repulsão é denotada por 1. Então, qualquer matriz corresponde a um determinado número, por exemplo, a matriz
\ begin {bmatrix} 1 e 0 \\ 1 & 0 \ end {bmatrix} significa 0101, ou seja, 5 (o último dígito na forma binária é o primeiro na matriz). O número de matrizes diferentes para as regras é
. Por exemplo, para dois tipos de partículas, você recebe 16 regras.

Pode parecer que a regra 3 é igual à regra 7, mas se você as traduzir em matrizes, você obtém
\ begin {bmatrix} 1 e 1 \\ 0 & 0 \ end {bmatrix} e
\ begin {bmatrix} 1 e 1 \\ 1 & 0 \ end {bmatrix} , o que significa que na regra 7 apenas o bege é atraído um pelo outro. Enquanto na regra 3, o bege também é atraído pelo vermelho. Mas devido à baixa densidade de vermelhos, isso tem um efeito sutil. De fato, as mesmas regras podem ser chamadas, por exemplo, 3 e 12, uma vez que todo o comportamento das partículas é idêntico, apenas as cores mudaram de lugar. Se deixarmos apenas as regras com comportamento único, das 16 regras teremos 10. Para três tipos de partículas de 512 combinações possíveis, restam 104 únicas e para quatro - 3044 de 65536 A sequência
2, 10, 104, 3044 é obtida.
Mas voltando às nossas dez regras.

A regra 9, que é a matriz, chama sua atenção
, onde os mesmos se repelem e se atraem. Partículas aleatoriamente dispersas formam rapidamente "fios" e congelam com isso.
As regras 1 e 15 também congelam: são equivalentes a duas regras únicas para um tipo de partícula (GIF animado anterior). Geralmente todas as regras são fixas, cujas matrizes são simétricas. Existem também as regras 2, 3, 5 e 11 com matrizes assimétricas. Isso significa que um tipo de partícula é atraído para o segundo e o segundo é repelido do primeiro. A recuperação começa.

A regra 3 é muito estável, pois as capturas cessam em algum momento e, se forem retomadas, raramente e não por muito tempo. A regra 11 é muito caótica. Permanecem 2 e 5.
De alguma forma, você pode combiná-los para torná-lo ainda mais interessante. Peguei a regra 105 para três cores, ou seja, uma matriz
\ begin {bmatrix} 1 & 0 & 0 \\ 1 & 0 & 1 \\ 1 & 0 & 0 \ end {bmatrix} , e este é o comportamento:

Tudo parece animado, mas instável. Mas e quanto a certas criaturas "vivas" repetidas? Como procurar osciladores e planadores? Temos que mudar as regras novamente!
Vida flutuante
Não mudaremos muito as regras. Em vez disso, adicione um novo recurso. Agora as partículas formarão ligações a uma curta distância. Se as partículas estão ligadas, elas são constantemente atraídas uma pela outra. Essa atração não enfraquece com a distância. Mas, se a distância estiver acima de um determinado limite, a conexão será interrompida.
Tentei opções diferentes com três cores e decidi onde o vermelho pode formar apenas uma conexão, bege - três e azul - dois, ou seja, você pode designar a conexão máxima no formulário
.
Ao mesmo tempo, os vermelhos não podem se ligar a outros vermelhos, bege e azul não podem ter mais que duas ligações com partículas de sua própria cor e não mais que um com partículas de todas as outras cores. Isso tudo é na forma de uma matriz:
\ begin {bmatrix} 0 & 1 & 1 \\ 1 & 2 & 1 \\ 1 & 1 & 2 \ end {bmatrix}
Eu brinquei com diferentes regras de puxar / empurrar e gostei
\ begin {bmatrix} 1 & 1 & 0 \\ 1 & 1 & 1 \\ 1 & 1 & 1 \ end {bmatrix} isto é, os vermelhos são atraídos pelos azuis e, em todos os outros casos, todos são repelidos.

Parece que essas criaturas estão flutuando em um líquido ou batendo as asas.


Um par de osciladores e um par de planadores.
É fácil obter números fixos: você não precisa usar vermelho e azul juntos, pois nessas regras essa é a única combinação de atração.


Mas, às vezes, o movimento ocorre com essas cores. Alguns números começam a girar, a partir de outros, "engrenagens" são obtidas.

Conclusão
No futuro, seria interessante comparar os números obtidos, coletar estatísticas sobre a frequência de sua aparência.
Você também pode usar essas regras como base para criar criaturas mais complexas com comida, reprodução e evolução.
Você pode construir circuitos lógicos a partir disso, construir uma calculadora, um processador é melhor não necessário.
Jogar
Implementação JS da
v1vendiCódigo fonte
Código JavaCoisas legais semelhantes
CosmosVida das partículasClusters