/** * Textos que se repelen. * Nubes de etiquetas para presentación * Por Carlos Tricas * 070923 - Processing **/ import java.io.*; // Declaración de la matriz de textos. Clase_Texto [] Textos; // Numero de textos. int num_textos = 31, diapositiva = 0, max_diapositiva=9, suich=0, suix=0, palabra=0; float tiempo, tama_font, d_x, d_y, dist_x, dist_y,xxx,yyy,angulo,transX,transY,pos_z=0, giro_x=0,giro_y=0,giro_z=0, adios=1.0; PFont font; void setup() { randomSeed(0); // Inicialización de la ventana 3d. size(800, 450, P3D); font = loadFont("ScalaSans-Caps-32.vlw"); textFont(font); textAlign(CENTER, CENTER); rectMode(CENTER); frameRate(30); Textos = new Clase_Texto[num_textos]; inicializa(); carga_cadenas(); transX = width/2; transY = height/2; } void draw() { ambientLight(255, 255, 255); camera(000,000,3000+pos_z,0,0,0,0,1,0); background(0,0,54); fill(254,254,200); for (int ii = 0; ii < num_textos; ii++) { d_x=0; d_y=0; for (int jj = 0; jj < num_textos; jj++) { dist_x=(Textos[ii].pos_x-Textos[jj].pos_x); dist_y=(Textos[ii].pos_y-Textos[jj].pos_y); if (dist_x!=0) {d_x=d_x+Textos[ii].tama*Textos[jj].tama/(pow(dist_x,1)*15000);} if (dist_y!=0) {d_y=d_y+Textos[ii].tama*Textos[jj].tama/(pow(dist_y,1)*15000);} } if (((Textos[ii].pos_x<1500) && (Textos[ii].pos_x>-1500)) || (adios!=1)) {Textos[ii].nueva_pos_x=Textos[ii].pos_x+d_x*300*adios;} if (((Textos[ii].pos_y<750) && (Textos[ii].pos_y>-750))|| (adios!=1)) {Textos[ii].nueva_pos_y=Textos[ii].pos_y+d_y*150*adios;} } for (int i = 0; i < num_textos; i++) { xxx=Textos[i].nueva_pos_x; yyy=Textos[i].nueva_pos_y; Textos[i].pos_x=xxx; Textos[i].pos_y=yyy; if (Textos[i].nuevo_tama>Textos[i].tama) {Textos[i].tama=Textos[i].tama+7;} if (Textos[i].nuevo_tamamax_diapositiva) {diapositiva = 0;} Actualiza_tamanos(); } void Diapositiva_anterior() { diapositiva--; if (diapositiva<0) {diapositiva = max_diapositiva;} Actualiza_tamanos(); } void Actualiza_tamanos() { for (int i = 0; i < num_textos; i++) { if (Textos[i].numero_diapositiva==diapositiva) {Textos[i].nuevo_tama=300;} else {Textos[i].nuevo_tama=50;} } } void a_lo_loco() { if (suich==0) {suich=1;} else { for (int i = 0; i < num_textos; i++) {Textos[i].nuevo_tama=50;} suich=0; } } void reset_reset() { adios=1; suich=0; suix=0; giro_x=0; giro_y=0; giro_z=0; pos_z=0; randomSeed(0); inicializa(); carga_cadenas(); diapositiva=0; } void enlazar() { if (diapositiva == 1) {link("http://www.f-lohmueller.de/pov_tut/loop/povlup6e.htm");} if (diapositiva == 2) {link("http://en.wikipedia.org/wiki/Gratis_versus_Libre");} if (diapositiva == 3) {link("http://www.linux.org/");} if (diapositiva == 4) {link("http://www.povray.org/");} if (diapositiva == 5) {link("http://es.wikipedia.org/wiki/Arte");} if (diapositiva == 6) {link("http://es.wikipedia.org/wiki/Arte");} if (diapositiva == 7) {link("http://es.wikipedia.org/wiki/Arte");} if (diapositiva == 8) {link("http://www.infinite-art.com/");} if (diapositiva == 9) {link("http://www.youtube.com/watch?v=qXA9B-1NkL8");} if (diapositiva == 0) {link("http://www.mundosimaginados.com/processing/cubos/cubos.html");} } void pasa_palabra() { reset_reset(); } class Clase_Texto { float pos_x, pos_y, pos_z, nueva_pos_x, nueva_pos_y, nueva_pos_z, tama, nuevo_tama; int numero_diapositiva; String Contenido; void escribe() { textSize(tama); rotateY(giro_y); rotateZ(giro_z); rotateX(giro_x); text(Contenido,pos_x, pos_y,pos_z); } } void inicializa() { for (int i = 0; i < num_textos; i++) {Textos[i]=new Clase_Texto();} for (int i = 0; i < num_textos; i++) { Textos[i].Contenido="PovRay"; Textos[i].pos_x=random(-600,600); Textos[i].pos_y=random(-300,300); Textos[i].pos_z=random(-200,200); Textos[i].tama=50; Textos[i].nuevo_tama=50; Textos[i].numero_diapositiva=0; } } void carga_cadenas() { String lines[] = loadStrings("list.txt"); for (int i=0; i < lines.length; i=i+2) { Textos[i/2].Contenido=lines[i]; Textos[i/2].numero_diapositiva=int(lines[i+1]); println(Textos[i/2].Contenido); } } void Final() {suix=1;}