3 01

[Processing]シンプルなサンプル、アナログ時計を描いてみた

Tag: processinguechoco @ 00 : 00 : 00

 シンプルなアナログ時計を描いてみました。

 注意点は、ラジアンの0度がx軸の方向で、しかも反時計回りに増えるので、プログラム中ではラジアンをマイナス値でとり、さらに90度の補正をしています。

Processing:
  1. int cx, cy; // 中心座標
  2. int radius = 85; //時計の半径
  3.  
  4.   size(200, 200);
  5.   colorMode(RGB, 100);
  6.   background(100);
  7.   smooth();
  8.  
  9.   frameRate(10);
  10.  
  11.   cx = width / 2;
  12.   cy = height / 2;
  13. }
  14.  
  15.   // 背景
  16.   noStroke();
  17.   fill(100, 30);
  18.   rect(0, 0, width, height);
  19.  
  20.   // 時計のフレーム
  21.   stroke(0);
  22.   noFill();
  23.   ellipseMode(CENTER_RADIUS);
  24.   ellipse(cx, cy, radius, radius);
  25.  
  26.   // 時刻を取得
  27.   float s = second();
  28.   float m = minute() + s / 60.0;
  29.   float h = hour() % 12 + m / 60.0;
  30.  
  31.   float rad;
  32.  
  33.   // 時
  34.   rad = -TWO_PI * h / 12 + HALF_PI;
  35.   stroke(0, 0, 100);
  36.   line(cx, cy, cx + cos(rad) * radius * 0.5, cy - sin(rad) * radius * 0.5);
  37.  
  38.   // 分
  39.   rad = -TWO_PI * m / 60 + HALF_PI;
  40.   stroke(0, 100, 0);
  41.   line(cx, cy, cx + cos(rad) * radius * 0.75, cy - sin(rad) * radius * 0.75);
  42.  
  43.   // 秒
  44.   rad = -TWO_PI * s / 60 + HALF_PI;
  45.   stroke(100, 0, 0);
  46.   line(cx, cy, cx + cos(rad) * radius * 0.9, cy - sin(rad) * radius * 0.9);
  47. }

processing_Clock.jpg