Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Efecto de desenfoque
Puede crear un efecto de desenfoque utilizando un rectngulo semitransparente dentro del bloque
draw().
La cantidad de desenfoque es controlado por el valor del parmetro de transparencia usado para
pintar el relleno del rectngulo (la funcin fill()).
Los nmeros cercanos a 255 refrescarn rpidamente la pantalla, mientras que los cercanos a 0
crearn un fundido lento.
Veamos su aplicacin en el siguiente ejemplo:
floaty=50.0;
floatvelocidad=1.0;
floatradio=15.0;
intdireccion=1;
EntornosdedesarrollodeimagengenerativaUniversidadNacionaldeQuilmes
Docente:RalF.Lacabanne|URL:http://raullacabanne.com.ar/
2
voidsetup(){
size(100,100);
smooth();
noStroke();
ellipseMode(RADIUS);
}
voiddraw(){
fill(0,12);//Valoresfuncionalesentre10y100
rect(0,0,width,height);
fill(255);
ellipse(33,y,radio,radio);
y+=velocidad*direccion;
if((y>heightradio)||(y<radio)){
direccion=direccion;
}
}
EntornosdedesarrollodeimagengenerativaUniversidadNacionaldeQuilmes
Docente:RalF.Lacabanne|URL:http://raullacabanne.com.ar/
EntornosdedesarrollodeimagengenerativaUniversidadNacionaldeQuilmes
Docente:RalF.Lacabanne|URL:http://raullacabanne.com.ar/
4
voiddraw(){
fill(0,12);
rect(0,0,width,height);
floatd=dist(origenX,origenY,destinoX,destinoY);
if(d>1.0){
origenX+=(destinoXorigenX)*easing;
origenY+=(destinoYorigenY)*easing;
}
fill(255);
ellipse(origenX,origenY,20,20);
}
Curvas simples
Las funciones exponenciales son muy tiles a la hora de crear curvas simples. En general se utilizan
valores normalizados en conjuncin con la funcin pow() para producir incrementos y decrementos
exponenciales de nmeros que nunca exceden el rango de 0.0 a 1.0. Estas ecuaciones tienen la
siguiente forma:
y = xe
donde x (base) corresponde a un valor decimal entre 0.0 y 1.0 y e (exponente) corresponde a un
valor entero o decimal:
for(intx=0;x<100;x++){
floatn=norm(x,0.0,100.0);//Rango0.0a1.0
floaty=pow(n,0.4);//Clculodecurva(exponente0.4)
EntornosdedesarrollodeimagengenerativaUniversidadNacionaldeQuilmes
Docente:RalF.Lacabanne|URL:http://raullacabanne.com.ar/
5
y*=100;//Rango0.0a100.0
point(x,y);
}
EntornosdedesarrollodeimagengenerativaUniversidadNacionaldeQuilmes
Docente:RalF.Lacabanne|URL:http://raullacabanne.com.ar/
Todas las curvas simples presentadas anteriormente pueden ser escaladas y combinadas para
generar recorridos nicos de movimiento. Una vez que se haya calculado un paso de una curva, el
programa puede calcular otras posiciones basadas en una curva diferente:
floatorigenX=20.0;//CoordenadadeorigenenX
floatorigenY=10.0;//CoordenadadeorigenenY
floatdestinoX=70.0;//CoordenadadedestinoenX
EntornosdedesarrollodeimagengenerativaUniversidadNacionaldeQuilmes
Docente:RalF.Lacabanne|URL:http://raullacabanne.com.ar/
7
floatdestinoY=80.0;//CoordenadadedestinoenY
floatdistX;//DistanciaamoverenejeX
floatdistY;//DistanciaamoverenejeX
floatexponente=3.0;//Determinaeltipodecurva
floatx=0.0;//CoordenadaactualenX
floaty=0.0;//CoordenadaactualenY
floatpaso=0.01;//Tamaodecadapaso(0.0a1.0)
floatpct=0.0;//Porcentajerecorrido(0.0a1.0)
intdireccion=1;
voidsetup(){
size(100,100);
noStroke();
smooth();
distX=destinoXorigenX;
distY=destinoYorigenY;
}
voiddraw(){
fill(0,2);
rect(0,0,width,height);
pct+=paso*direccion;
if((pct>1.0)||(pct<0.0)){
direccion=direccion*1;
}
if(direccion==1){
x=origenX+(pct*distX);
floate=pow(pct,exponente);
y=origenY+(e*distY);
}else{
x=origenX+(pct*distX);
floate=pow(1.0pct,exponente*2);
y=origenY+(e*distY)+distY;
}
fill(255);
ellipse(x,y,20,20);
}
8
floatx=0.0;//CoordenadaactualenX
floaty=0.0;//CoordenadaactualenY
floatpaso=0.01;//Tamaodecadapaso(0.0a1.0)
floatpct=0.0;//Porcentajerecorrido(0.0a1.0)
voidsetup(){
size(100,100);
noStroke();
smooth();
distX=destinoXorigenX;
distY=destinoYorigenY;
}
voiddraw(){
fill(0,2);
rect(0,0,width,height);
if(pct<1.0){
pct=pct+paso;
floatvelocidad=pow(pct,exponente);
x=origenX+(velocidad*distX);
y=origenY+(velocidad*distY);
}
fill(255);
ellipse(x,y,20,20);
}
voidmousePressed(){
pct=0.0;
origenX=x;
origenY=y;
distX=mouseXx;
distY=mouseYy;
}
9
Del mismo modo, las translaciones dentro del bloque setup() no tienen efecto en las figuras
producidas en el bloque draw():
voidsetup(){
size(100,100);
smooth();
translate(50,0);//Notieneefecto
}
voiddraw(){
background(0);
ellipse(0,50,60,60);
}
Las funciones de transformacin pueden ser utilizadas para generar movimiento, sin embargo su
uso puede ser un poco engorroso.
floatangulo=0.0;
voidsetup(){
size(100,100);
smooth();
noStroke();
}
voiddraw(){
fill(0,12);
rect(0,0,width,height);
fill(255);
angulo=angulo+0.02;
translate(70,40);
rotate(angulo);
rect(30,30,60,60);
}
Lectura recomendada
EntornosdedesarrollodeimagengenerativaUniversidadNacionaldeQuilmes
Docente:RalF.Lacabanne|URL:http://raullacabanne.com.ar/