bit a bit

Fórmulas maravilhosas.

Uma das formas mais simples de gerar imagens num rectângulo, de uma forma generativa, é usar os índices de uma matriz, (x,y) e efectuar o preenchimento dessa matriz com o valor de uma função f(x,y). Ora uma das formas mais interessantes de fazer isso é usando operações binárias bit-a-bit dos índices da matriz.

Exemplificando usando o GNU/Octave:

bitxor(3,5)
6. A disjunção-exclusiva, xor para os amigos, bit-a-bit de 3 com 56 i.e.
3=011
5=101
6=3|5=110
faz-se o xor bit-a-bit.

O código seguinte implementa e gera as imagens, com tamanho definido por n, neste caso 256x256, usando a função bitxor e fazendo no fim o congruência módulo 9 (o resto inteiro da divisão por 9).

############################################################
## author: @tca@masto.pt
## date: 2022-11-03 [15:03]
## This program is public domain.

timetag= floor(time*1000);
n=256;
[x y]=meshgrid([0:n-1],[0:n-1]);
z=mod(bitxor(x,y),9);
z=(z/max(max(z)));

m=512; ## define o tamanho da imagem final

## por ordem inversa para ficarem bem ordenados

figure(3)
imshow(~logical(z))
print("-djpg", ["-S" num2str(m) "," num2str(m)], [num2str(timetag) "-negonebit-bitx" ".jpg"])

figure(2)
imshow(logical(z))
print("-djpg", ["-S" num2str(m) "," num2str(m)], [num2str(timetag) "-onebit-bitx" ".jpg"])

figure(1)
imshow(255*z)
print("-djpg", ["-S" num2str(m) "," num2str(m)], [num2str(timetag) "-grey-bitx" ".jpg"])

Resultado de aplicação da expressão mod(bitor(x,y),9)

com coloração de 1bit apenas, obtida com a operação logical dos valores anteriores

e a sua negação

O link inicial dá-nos mais pistas e outras fórmulas que podemos usar. Seguem alguns exemplos.

Exemplos

triângulos de Sierpinski mod(bitor(x,y),3)

mod(127*(x-127),(y-127))

mod((x.*y).^9,3)

mod(mod(x,y),4)

bitand(bitand(x,y),mod(bitor(x,y),19)).*mod(127*(x-127),(y-63))

mod(64*x,y)

Numa outra qualquer linguagem de programação é possível repetir estes exemplos ou construir outros ;) Fico à espera dessas partilhas @tca@masto.pt!

Bons desenhos generativos!


P.S.

bitshift(bitshift(bitand(bitxor(x,bitcmp(y)),x-350),-3).^2,-12)

Sleator (1976, unpublished)


Refs.:

Criado/Created: 03-11-2022 [14:57]

Última actualização/Last updated: 30-05-2023 [23:14]


Voltar à página inicial/Back to first page


GNU/Emacs Creative Commons License

(c) Tiago Charters de Azevedo