Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Processing:Примеры/Часы

Материал из Онлайн справочника
Перейти к: навигация, поиск


Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Ambox content.png Черновик


Описание[1]

Текущее время можно определить при помощи функций second(), minute() и hour(). В этом примере позиция стрелок задается при помощи значений функций sin() и cos().

Пример

  1. int cx, cy;
  2. float secondsRadius;
  3. float minutesRadius;
  4. float hoursRadius;
  5. float clockDiameter;
  6.  
  7. void setup() {
  8.   size(640, 360);
  9.   stroke(255);
  10.  
  11.   int radius = min(width, height) / 2;
  12.   secondsRadius = radius * 0.72;
  13.   minutesRadius = radius * 0.60;
  14.   hoursRadius = radius * 0.50;
  15.   clockDiameter = radius * 1.8;
  16.  
  17.   cx = width / 2;
  18.   cy = height / 2;
  19. }
  20.  
  21. void draw() {
  22.   background(0);
  23.  
  24.   // рисуем фон с циферблатом:
  25.   fill(80);
  26.   noStroke();
  27.   ellipse(cx, cy, clockDiameter, clockDiameter);
  28.  
  29.   // углы для sin() и cos() начинаются с 3 часов;
  30.   // вычитаем «HALF_PI», чтобы углы начинались сверху:
  31.   float s = map(second(), 0, 60, 0, TWO_PI) - HALF_PI;
  32.   float m = map(minute() + norm(second(), 0, 60), 0, 60, 0, TWO_PI) - HALF_PI;
  33.   float h = map(hour() + norm(minute(), 0, 60), 0, 24, 0, TWO_PI * 2) - HALF_PI;
  34.  
  35.   // рисуем стрелки часов:
  36.   stroke(255);
  37.   strokeWeight(1);
  38.   line(cx, cy, cx + cos(s) * secondsRadius, cy + sin(s) * secondsRadius);
  39.   strokeWeight(2);
  40.   line(cx, cy, cx + cos(m) * minutesRadius, cy + sin(m) * minutesRadius);
  41.   strokeWeight(4);
  42.   line(cx, cy, cx + cos(h) * hoursRadius, cy + sin(h) * hoursRadius);
  43.  
  44.   // рисуем минутные тики:
  45.   strokeWeight(2);
  46.   beginShape(POINTS);
  47.   for (int a = 0; a < 360; a+=6) {
  48.     float angle = radians(a);
  49.     float x = cx + cos(angle) * secondsRadius;
  50.     float y = cy + sin(angle) * secondsRadius;
  51.     vertex(x, y);
  52.   }
  53.   endShape();
  54. }

См.также

Внешние ссылки

  1. processing.org - Clock