Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2011, 20:57   #1
lulia
Пользователь
 
Регистрация: 07.10.2011
Сообщений: 21
По умолчанию часы

Здравствуйте! Мне необходимо создать часы следующего вида в PascalABC c движущимися стрелками: часы.jpg.
Я сделала программу в которой есть круг часов и движущаяся секундная стрелка, а вот как добавить деления в виде кругов затрудняюсь. Помогите кто может!
Код:
Мой листинг:
uses graphABC;
  begin
   lockdrawing;
   for var x:=1 to 61 do
    begin
    window.clear;
    coordinate.SetOrigin(320, 240);
    circle(0,0,200);
    line (0,0,180,0);
    coordinate.Angle:=360/60*x;
    sleep (1000);
    redraw;
   end;
end.

Последний раз редактировалось Serge_Bliznykov; 06.12.2011 в 09:17.
lulia вне форума Ответить с цитированием
Старый 04.12.2011, 21:03   #2
morgan97
Пользователь
 
Регистрация: 08.01.2011
Сообщений: 28
По умолчанию

ну если я не ошибаюсь надо вставить эти круги в координаты, где они нужны с помощью той же функции, которой вы рисовали основной круг.
morgan97 вне форума Ответить с цитированием
Старый 04.12.2011, 21:26   #3
lulia
Пользователь
 
Регистрация: 07.10.2011
Сообщений: 21
По умолчанию ответ

Если я их вставляю в цикл, то круг деления двигается вместе со стрелкой. Если я их пишу перед циклом, то цикл их стирает. Если я их пишу после цикла, то сначала двигается стрелка, а потом появляются деления. А нужно чтоб были деления и двигалась стрелка. Поэтому и прошу помощи!

Последний раз редактировалось lulia; 04.12.2011 в 21:34.
lulia вне форума Ответить с цитированием
Старый 04.12.2011, 23:26   #4
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

а как вы прорисовываете деления?

Последний раз редактировалось unbanned; 04.12.2011 в 23:40.
unbanned вне форума Ответить с цитированием
Старый 05.12.2011, 06:51   #5
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

Вспомните тригонометрию
Мысленно нарисуйте внутренний круг, на котором будут располагаться эти "деления", делений 12, соответственно разница в углах между ними - 360/12 = 30 градусов
Берете начальный угол 90 градусов и начинаете в цикле считать координаты:
X=cos(угол)*(Радиус мнимой окружности)
Y=sin(угол)*(рад. мн. окр)

и добавляете к текущему углу 30 градусов. все в общем то просто (не забудьте только про то, что в паскале нужно оперировать радианами)
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 05.12.2011, 20:49   #6
lulia
Пользователь
 
Регистрация: 07.10.2011
Сообщений: 21
По умолчанию Прорисовка делений

Я прорисовываю деления так:
PHP код:
for var x1:=1 to 12 do
  
begin
   circle
(180,0,10);
   
coordinate.Angle:=360/12*x1;
  
end
Она рисует правильно, но если я ее вставляю в самое начало программы, то функция window.clear эти деления стирает. Если я ее вставляю в цикл, то деление двигается вместе со стрелкой, а мне нужно чтоб они оставались на месте. Если деления вставить после цикла, то сначало двигается стрелка, но потом деления не появляются.
Как же мне поправить прогу?
lulia вне форума Ответить с цитированием
Старый 05.12.2011, 21:17   #7
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Код:
нарисовали круг
нарисовали деления
цикл
    нарисовали стрелку
    перерисовали деления
    задержка
    стёрли стрелку
конец цикла
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 05.12.2011, 21:30   #8
lulia
Пользователь
 
Регистрация: 07.10.2011
Сообщений: 21
По умолчанию

Подскажите какая функция стирает стрелку? Я знаю только как очистить экран.
lulia вне форума Ответить с цитированием
Старый 05.12.2011, 21:34   #9
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

из поста Zer0

Код:
uses
  graphABC;

var
  x, x1: real; 

begin
  lockdrawing;
  x := 0;
  while x <= 360 do
  begin
    window.clear; 
    coordinate.SetOrigin(320, 240); 
    circle(0, 0, 200); 
    x1 := 0;
    while x1 <= 2 * pi do 
    begin
      circle(round(cos(x1) * (180)), round(sin(x1) * (180)), 10);
      x1 := x1 + pi / 6;
    end;
    line(0, 0, round(cos(x) * (180)), round(sin(x) * (180))); 
    x := x + (6 * pi / 180);
    sleep(1000);
    redraw; 
  end; 
end.
Цитата:
Сообщение от Hacker19_90 Посмотреть сообщение
Код:
    задержка
    стёрли стрелку
и да, мне тоже интересно как стереть стрелку?))

Последний раз редактировалось unbanned; 05.12.2011 в 21:39.
unbanned вне форума Ответить с цитированием
Старый 05.12.2011, 21:45   #10
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Цитата:
и да, мне тоже интересно как стереть стрелку?))
нарисовать на её месте такую же "стрелку" ток цветом фона!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Часы vadiprog Помощь студентам 1 03.10.2011 07:36
Часы ВалекFCRK Общие вопросы Delphi 3 19.06.2011 22:43
Часы DRAgon™ Операционные системы общие вопросы 9 08.01.2011 09:59
Часы в С++ voffka_C++ Помощь студентам 1 14.11.2010 21:29
Часы Bingam Vici Свободное общение 5 18.05.2009 14:50