dump

Arquivo para Fevereiro, 2011

Personagens Modulares

[gallery /]

Numa primeira abordagem pareceu-me importante o desafio de pensar uma alternativa para o sistema de Identicons como forma de reconhecimento visual cujos resultados permitam identificação (no seu sentido total). Assim, mais do que pensar numa solução que resolvesse 300000 situações, prefiro não encontrar um limite tangível (apontar para o infinito?).

Os insectos surgiram rapidamente como o personagem que naturalmente oferece mais variações: são conhecidas milhares de espécies e outras tantas estão por descobrir. Por outro lado, no contexto digital/informático, estão sempre em relação com a ideia de “bug” (falha). Lembrei-me pouco depois que não era completamente inocente esta solução pois já tinha uma imagem em mente que acabei por identificar.

Avancei então com um gerador de insectos (ou antes, insectos e aranhas, que não são bem a mesma coisa). Tencionava também incluir estruturas semelhantes a minhocas, larvas e centopeias mas não tive tempo (ainda) e teria de contornar uma ou outra dificuldade no código (points e contours de path no shoebot).

Código nodebox/shoebot:

"""

Aranha (2 partes) ou Insecto (3 partes) de tamanho variável

6 ou 8 patas variáveis (8 se for aranha)

2 olhos variáveis ou mais se for aranha

1 a 3 pares variáveis de mandibulas

0 a 2 pares variáveis de antenas se for insecto

0 a 2 pares variáveis de asas se for insecto

"""

# devolve valor relativo a proporção (importado do Processing)

def map(value,istart,istop,ostart,ostop):

return ostart+(ostop-ostart)*((value-istart)/(istop-istart))

# devolve a distancia entre dois pontos

def distance(x0,y0,x1,y1):

from math import sqrt,pow

return sqrt(pow(x1-x0,2)+pow(y1-y0,2))

# devolve coordenadas de um ponto a uma distancia e angulo de outro

def rel_coordinates(x0,y0,distance,angle):

from math import radians,sin,cos

x1=x0+cos(radians(angle))*distance

y1=y0+sin(radians(angle))*distance

return x1,y1

# devolve o angulo entre dois pontos

def angle(x0,y0,x1,y1):

from math import degrees,atan2

a=degrees( atan2(y1-y0,x1-x0) )

return a

# oval a partir do centro

def oval_from_center(x,y,w,h,drawing=True):

x=x-w/2

y=y-h/2

if drawing==True:

oval(x,y,w,h)

else:

return oval(x,y,w,h,draw=False)

# devolve lista de partes, proporção (tamanho) de cada parte

def parts(parts_number,start_x,start_y,length,angle):

parts=list() # (size_x,size_y,rad_size,brightness)

head_size=random(.15,.45)/(parts_number-1)

head_width=random(.9,1.1)*head_size

head_rad=random(2.1,3.) # falsos radius (menores)

parts.append((head_size,head_width,head_rad,random(-.25,.25)))

tor_size=0

if parts_number==3:

tor_size=random(.1,.45)

tor_width=random(.85,1.5)*head_size

tor_rad=random(2.1,3.)

parts.append((tor_size,tor_width,tor_rad,random(-.25,.25)))

abd_size=1-head_size-tor_size

abd_width=random(1.25*head_size,abd_size*.75)

abd_rad=random(2.1,3.)

parts.append((abd_size,abd_width,abd_rad,random(-.25,.25)))

parts.reverse() # tails first

return parts

size(400,400)

colormode(HSB)

background(1)

# Cores ternárias

main_color=random(0.,1.)

alt_color=main_color+.33 if main_color+.330 else main_color+.66

# Inicio e fim do insecto, opções

body_start=(random(0,WIDTH),random(0,HEIGHT))

body_end=None

while body_end==None or distance(body_start[0],body_start[1],body_end[0],body_end[1])

Espiral de Imaginação

diadacrianca.info