// Programa de visualizacion que se corre con el software Processing https://processing.org // El programa consiste en un loop sin fin: // lee el archivo config.dat con las posiciones de los atomos que grafica como circulos // lee el archivo time.dat con el valor del reloj // Directorio de donde se lee todo. Puede ser un path absoluto o uno relativo. En este caso es el directorio previo //String data_dir = "/Volumes/Home/rsoto/Research/"; String data_dir = ".."; // Constantes globales. float L0 = 40.0; // Largo total de la caja a graficar float L = 30.0; // Tamanho del sistema simulado float Diam = 1.0;// Diametro de las particulas float u2px; // Conversion de valores L-J a pixeles float dpix; // Diametro de las particulas en pixeles int W,H; // Ancho y alto en pixeles de la caja // Rutina inicial, se ejecuta una vez al inicio del programa. Siempre se debe llamar setup() void setup() { // Ventana de visualizacion de 600x600 pixeles W = 500; H = W; // Se crea la ventana con fondo blanco size(W,H); background(255); // Tasa de refresco de la pantalla y optimizaciones generales frameRate(5); // 5 cuadros por segundo smooth(); // makes particles look better, but takes longer to render // Se calculas las conversiones u2px=W/L0; dpix=Diam*u2px; } // Rutina que se ejecuta en lopp. Siempre se debe llamar draw() void draw() { // Se llene los archivos. Primero se escribe en fn y fn2 los nombres de los archivos con path // Luego se lee y se guarda en arreglos fin y time String fn = String.format("%s/config.dat", data_dir); String [] fin = loadStrings(fn); String fn2 = String.format("%s/time.dat", data_dir); String [] time = loadStrings(fn2); // Se dibuja cada cuadro. Primero se borra todo con blanco background(255); noStroke(); // No dibuja el borde de la imagen // Se recorre el arrglo fin y se hace un circulo. Se corre en L/2 para que quede centrado en la pantalla for (int i =0 ; i < fin.length; i++) { String[] pieces = split(fin[i], ' '); float x = float(pieces[0]); float y = float(pieces[1]); int t = int(pieces[4]); if(t==1) fill(255,100,0); else fill(0,100,255); ellipse(u2px*(x+L0/2),u2px*(y+L0/2),dpix,dpix); } noFill(); stroke(0); rect(u2px*(-L/2+L0/2),u2px*(-L/2+L0/2),u2px*L,u2px*L); // Se pone color negro. Se pone el texto con el tiempo fill(0,0,0); text(time[0],20,20); // Si se aprieta p se imprime a un archivo con un numero ### consecutivo if(keyPressed && key=='p') { saveFrame("output-####.png"); } //saveFrame("output-####.png"); }