singlepost

C# – пишу аналоговые часы. Как заставить двигаться стрелку? << На главную или назад  

Мне надо сделать аналоговые часы.. Как нарисовать круг, я понимаю:), а вот как заставить двигаться стрелку??? что за цикл??? помогите плиз..

20 ответов в теме “C# – пишу аналоговые часы. Как заставить двигаться стрелку?”

Страницы: [1] 2 »

  1. 1
    Евгений Гаврин ответил:

    Вам нужно каждый раз по тику таймера перерисовывать область вывода изображения.

  2. 2
    Юрий Плаксунов ответил:

    в таймере

  3. 3
    Борис Осипов ответил:

    Нужны синусы-косинусы и грамотно заданныеуглы)))

  4. 4
    Макс Лавров ответил:

    у тебя 1 точка движется по окружности единичного радиуса, проходя за 1 секунду 360/60 = 6 градусов. вторая точка – в центре. Раз в секуду ты их соединяешь и перерисовываешь форму. Угол задается выражением с синусом и косинусом(точно не помню – погугли). Отсчет – по таймеру

  5. 5
    Quizful Team ответил:

    #5 На сколько я понимаю, что "аналоговые часы" должны визуально непрерывно идти, а не рывками.
    Нужно каждые маленькие промежутки времени, например каждые 10 мс пересчет делать текущего положения стрелки и учитывать поправку на время вычисления углов и отрисовки графики.

  6. 6
    Леонид Максимов ответил:

    мои аналоговые часы (настоящие) рывком перемещают минутную стрелку каждые 10 секунд, секундная отсутствует. так что идти непрерывно совершенно не обязательно. кроме того, 100 герц не каждый монитор выведет.

    да, и еще.
    в школе как-то писали часы – вчетвером дома у одного из участников поочереди печатали код, которого было очень много: поскольку циклов еще не знали, то для каждого значения секунды был соответствующий If и рисование отрезка с синусами и косинусами :)

  7. 7
    Quizful Team ответил:

    я имел в виду секундную стрелку. А на счет минутной конечно там не так часто заметно будет перемещение

  8. 8
    Il Il ответил:

    делай все заменив на полярную систему координат, связь декартовой и полярной:
    x=R*cos(alfa)
    y=R*sin(alfa)

    R-длина стрелки
    alfa-угол поворота
    x,y-координаты подвижного конеца стрелки

  9. 9
    Il Il ответил:

    public partial class Form1 : Form
    {
    const float x0 = 100;
    const float y0 = 100;
    int ticks = 0;
    float alfa = 0;

    public Form1()
    {
    InitializeComponent();
    }

    private void pct01_Paint(object sender, PaintEventArgs e)
    {
    float r = 50;
    float x;
    float y;

    x=x0+r*(float)Math.Cos(alfa);
    y=y0+r*(float)Math.Sin(alfa);

    Graphics gr01 = e.Graphics;
    Pen p01 = new Pen(Color.Red, 5);

    gr01.DrawEllipse(p01, x0-50,x0-50,100, 100);
    gr01.DrawLine(p01, x0, y0, x, y);
    }

    private void timer1_Tick(object sender, EventArgs e)
    {

    ticks += 1;
    if (ticks == 60)
    {
    alfa = 0;
    }
    alfa += (float)0.104719;//угол 6 градусов в радианах
    pct01.Invalidate();
    }
    }

  10. 10
    Олег Викторов ответил:

    Это то Ясно…Вот только проблема…надо использовать СИСТЕМНОЕ время..

Страницы: [1] 2 »

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.