bit a bit
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)
dá 6
. A disjunção-exclusiva, xor
para os amigos, bit-a-bit de 3
com 5
dá 6
i.e.
3=011 5=101 6=3|5=110faz-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.:
- The Art of Computer Programming, Volume 4, Fascicle 1: Bitwise Tricks & Techniques do Knuth tem umas coisas giras sobre isto.
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


(c) Tiago Charters de Azevedo