Processing/JS

Hora y fecha

Podemos usar la fecha y hora del dispositivo como entrada.

second(), minute(), hour(), millis(), day(), month(), year()

Leer la hora abre muchas posibilidades, es posible hacer programas que cambien con la fecha o la hora.

Segundos, Minutos, Horas

El reloj del ordenador se lee con las funciones: second() que devuelve un valor de 0 a 59, minute() que devuelve un valor de 0 a 59, hour() que devuelve un valor de 0 a 23.

int lastSecond = 0;
void setup() {
size(100, 100);
}
void draw() {
int s = second();
int m = minute();
int h = hour();
// Only prints once when the second changes
if (s != lastSecond) {
println(h + ":" + m + ":" + s);
lastSecond = s;
}
}

El siguiente ejemplo usamos la función nf() para formatear números en string. Hay dos versiones: para formato floats, y otra para ints. Los valores de los dígitos, el número izquierdo y derecho deben ser enteros positivos. En este ejemplo, nf () se utiliza para agregar ceros a la izquierda de un número. Esto se emplea para la alineación de una lista de números.

nf ( num , dígitos )
nf ( num , izquierda , derecha )

num float [], int [], o int: el número (s) a formato
dígitos int: número de dígitos a la almohadilla con cero
izquierda int: número de dígitos a la izquierda del punto decimal
derecho int: número de dígitos a la derecha del punto decimal

PFont font;
void setup() {
size(250, 100);
font = loadFont("ArialMT-48.vlw");
textFont(font);
}
void draw() {
background(0);
int s = second();
int m = minute();
int h = hour();
String t = nf(h,2) + ":" + nf(m,2) + ":" + nf(s,2);
text(t, 10, 55);
}

Hay muchas maneras de hacer un reloj o expresar el tiempo, en el siguiente ejemplo se dibujan líneas, podemos usar map() ajustamos el rango al ancho de la ventana:

En el primer ejemplo anterior, el número 60 se convierte de un valor en el intervalo de 0 a 100 en un valor que va desde el borde izquierdo de la ventana (0) a la derecha borde (ancho).

map ( valor , start1 , stop1 , start2 , stop2 )

valor float: el valor de entrada que desea convertir
start1 float: límite inferior del rango actual del valor
stop1 float: límite superior del rango actual del valor
start2 float: límite inferior del rango objetivo del valor
stop2 float: límite superior del rango objetivo del valor

reloj

void setup() {
size(100, 100);
stroke(255);
}
void draw() {
background(0);
float s = map(second(), 0, 60, 0, 100);
float m = map(minute(), 0, 60, 0, 100);
float h = map(hour(), 0, 24, 0, 100);
line(s, 0, s, 33);
line(m, 34, m, 66);
line(h, 67, h, 100);
}

Para construir un reloj tradicional, los valores se normalizan con map() entre 0 y 2π, la función hora como devuelve 0 a 24 y debe dar dos vueltas cada una en 12 horas, se escala con el modulo % 12.

void setup() {
size(100, 100);
stroke(255);
}
void draw() {
background(0);
fill(80);
noStroke();
// Los ángulos para el senio y el coseno, empiezan a las 3, es necesario restar PI/2 para que empieze al principio
ellipse(50, 50, 80, 80);
float s = map(second(), 0, 60, 0, TWO_PI) - HALF_PI;
float m = map(minute(), 0, 60, 0, TWO_PI) - HALF_PI;
float h = map(hour() % 12, 0, 12, 0, TWO_PI) - HALF_PI;
stroke(255);
line(50, 50, cos(s) * 38 + 50, sin(s) * 38 + 50);
line(50, 50, cos(m) * 30 + 50, sin(m) * 30 + 50);
line(50, 50, cos(h) * 25 + 50, sin(h) * 25 + 50);
}

Processing cuenta el tiempo transcurrido desde que se ejecuto el programa. Este tiempo se almacena en milisegundos. Dos mil milisegundos son 2 segundos, y 200 milisegundos son 0.2 segundos. Este número se obtiene con la función millis() y con ella calculamos el tiempo transcurrido y provocamos un evento:

int x = 0;
void setup() {
size(100, 100);
}
void draw() {
if (millis() > 3000) {
x++;
}
line(x, 0, x, 100);
}