处理,制作模拟时钟,数字

时间:2016-10-12 11:35:10

标签: java processing

所以,作为一个我想制作模拟时钟的转换,我相当远。我只需要全天候的数字,但我无法弄清楚如何制作这些。我现在已经制作了一些点,但是我想用数字1-12代替theese ..是否知道一种简单快捷的方法吗?我的代码如下:

    int cx, cy;
float secondsRadius;
float minutesRadius;
float hoursRadius;
float clockDiameter;

void setup() {
  size(1366,768);
  stroke(255);

  float radius = min(width/1.2, height/1.2) / 2;
  secondsRadius = radius * 0.72;
  minutesRadius = radius * 0.60;
  hoursRadius = radius * 0.50;
  clockDiameter = radius * 1.8;

  cx = width / 2;
  cy = height / 2;
}

void draw() {
  background(random(0,255),random(0,255),random(0,255));

  // Draw the clock background
  fill(0);
  noStroke();
  ellipse(cx, cy, clockDiameter, clockDiameter);

  // Angles for sin() and cos() start at 3 o'clock;
  // subtract HALF_PI to make them start at the top
  float s = map(second(), 0, 60, 0, TWO_PI) - HALF_PI;
  float m = map(minute() + norm(second(), 0, 60), 0, 60, 0, TWO_PI) - HALF_PI; 
  float h = map(hour() + norm(minute(), 0, 60), 0, 24, 0, TWO_PI * 2) - HALF_PI;

  // Draw the hands of the clock
  stroke(255);
  strokeWeight(1);
  line(cx, cy, cx + cos(s) * secondsRadius, cy + sin(s) * secondsRadius);
  strokeWeight(2);
  line(cx, cy, cx + cos(m) * minutesRadius, cy + sin(m) * minutesRadius);
  strokeWeight(4);
  line(cx, cy, cx + cos(h) * hoursRadius, cy + sin(h) * hoursRadius);

  // Draw the dots arround the clock
  strokeWeight(2);
  beginShape(POINTS);
  for (int a = 0; a < 360; a+=30) {
    float angle = radians(a);
    float x = cx + cos(angle) * secondsRadius;
    float y = cy + sin(angle) * secondsRadius;
    vertex(x, y);
  }
  endShape();
  textSize(40);
    text("Dank Clock", 570,40);
}

1 个答案:

答案 0 :(得分:1)

你已经有一个昼夜不停的循环,并在时钟位置放置点。现在你只需要一些逻辑来吸引那些职位。

处理具有text()功能,允许您在屏幕上绘制文本(或数字)。您可以调用它而不是vertex()来绘制小时数。

要获得绘制时间,只需使用每次循环时递增的int变量。像这样:

  int hour = 3;
  for (int a = 0; a < 360; a+=30) {
    float angle = radians(a);
    float x = cx + cos(angle) * secondsRadius;
    float y = cy + sin(angle) * secondsRadius;
    vertex(x, y);
    fill(255);

    text(hour, x, y);
    hour++;
    if(hour > 12){
      hour = 1;
    }
  }

请注意,我从3开始,因为您的角度从0开始,一直指向右侧。当循环超过12时,我只需在hour处重新开始1

您可能还可以找出一个从a映射到一小时的简单公式,这样您就不必自己进行递增。