시간과 날짜 데이터
이번 장은 프로세싱 시간과 날짜 데이터를 변수로 프로그램을 조정하는 것을 소개한다.
소개할 구문:
second(), minute(), hour), millis(), day). month(), year)
과거 문명들은 해시계나 물시계로 시간의 흐름을 시각화했지만 현대인들은 대부분 디지털 시계나 시. 분. 초침이 있는
12시간 단위 아날로그시계를 사용한다. 이 물건들은 당대의 기술을 증명하는 역할을 한다. 숫자식 디지털 계시기는 밝고 저 렴한 디스플레이가 필요한 디지털 시계에 적합하고 둥근 기어들이 모여 만들어진 시계는 시간의 원형적 개념에 부합한다고 할 수 있다. 첨탑 만한 대형 시계에 들어가던 거대한 기어와 추 등의 구성요소는 기술 발전 덕분에 점점크기가 줄고 저렴해 져 이제 가전제품, 휴대폰, 컴퓨터와 같은 디지털 기기는 항상 시간과 날짜를 표시해준다.
현재의 시간과 날짜 정보를 프로그램에 적용함으로써 새로운 탐구의 장이 열린다. 현재의 시간 데이터를 활용해 특정 시 간에 영상을 작동시키는 코드를 구성하거나 날짜에 따라 디스플레이 색상을 바꾸거나 매 시간 정각마다 애니메이션을 재생 하는 디지털 시계를 만들 수도 있다. 시간과 날짜 정보를 입력할 수 있게 되면서 소프트웨어를 이용해 기억과 상기, 흥미도 얻을 수 있게 되었다.
시 분 초
프로세싱의 프로그램은 컴퓨터의 시간 정보를 읽을 수 있다. 현재의 초 정보는 second() 함수로 얻을 수 있으며 0~59의 값을 반환한다. 현재의 분 정보는 minute() 함수를 사용하면 되며 이것도 0~59의 값을 반환한 다. 현재의 시각 정보는 hour ) 함수를 사용하며 24시간 단위 기준으로 0~23의 값을 반환한다. 이 단위에서 자정은 0. 정오는 12로 반환되며 오전 9시는 9이고 오후 5시는 17이다. 현재의 시간을 확인하기 위해 이 프로그램을 구동해보자.
int s = second();
/ Returns values from 0 to 59
int m = minute);
/ Returns values from 0 to 59
int h = hour );
/ Returns values from 0 to 23
printin(h + ":" + m + ":" + s); // Prints the time to the console
이 함수들을 draw() 블록 안에 기입하면 시간 정보를 지속적으로 얻을 수 있다. 다음 예시는 매 초마다 현재의 시간 정 보를 얻어 콘솔을 업데이트한다.
int lastSecond = 0;
void setup () {
size (100, 100);
}
void draw) {
ints = second();
int m = minute );
int h = hour ();
// Only prints once when the second changes
if (s != lastSecond) |
printin(h + ":" + m + "." + s);
lastSecond = s;
}
}
text() 함수를 이용해 디스플레이 창에 시간 데이터를 불러와 시간을 표시하는 시계를 만들어보자. Df( ) 함수(323 )는 왼쪽부터 오른쪽으로 숫자를 균일하게 정렬하는 데 사용된다. 한 자리 수는 숫자 왼쪽에 자동으로 0이 붙으므로 모든 시간 정보는 자동적으로 두 자리 수로 변환된다.
PFont font;
void setup() {
size(100, 100);
font = createFont"mono", 16);
textFont(font);
textAlign(CENTER);
}
void draw() {
background(0);
int s = second();
int m = minute );
int h = hour );
// The nf() function spaces the numbers nicely
String t = nf(h,2) + ":“ + nf(m,2) + ”:“ + nf(s, 2
text(t, 50, 55);}
다음 예시에서 수직선들은 현재의 시, 분, 초를 나타낸다. 디스플레이 창의 왼쪽 끝은 0이며 오른쪽은 각 시간요소의 최 대값이다. 원래 시간함수 값의 0~59, 0~23의 2가지 형태를 띠므로 이 시간요소들은 0~99의 범위로 자동 치환된다.
void setup() {
size(100, 100);
noSmooth();
stroke (255);}
void draw() {
background(0);
float s = map(second( ), 0, 59, 0, 99);
float m = map(minute(), 0, 59, 0, 99);
float h = map(hour(), 0, 23, 0, 99);
line(s, 0, s, 33);
line(m, 34, m, 66);
line(h, 67, h, 100);}
시간 값을 맵핑해 전통적인 시계 모양에 초, 분, 시침을 달아 놓을 수도 있다. 이 경우, 시간을 원의 한 점으로 표시하 기 위해 시간 값은 0~2m의 범위로 맵핑한다. hour() 함수는 24시간 단위로 값을 반환하므로 프로그램을 이용해 시간 값 %12를 해 12시간 단위로 변환한다.
void setup() {
size (100, 100);
stroke (255);
}
void draw() {
background(0);
fill (80);
noStroke );
// Angles for sin() and cos() start at 3 o'clock;
I subtract HALF_PI to make them statt at the top
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);
}