Отрисовка стрелок и их анимация

Наша следующая задача – нарисовать анимированные стрелки. Алгоритм прост – каждую секунду перерисовываем часы с новым показанием стрелок.

Сначала нарисуем стрелки. Нам нужно нарисовать несколько стрелок разной длины и толщины, для этого напишем функцию:

#define M_PI 3.14159265358979323846

 

void drawArrow(Graphics * graphics,x0, int y0, double angle,

int len, int width, const Color & color)

{

Pen pen(color, width);

graphics->DrawLine(&pen, x0, y0, x0+int(len*sin(angle)),

                    y0-int(len*cos(angle)));

}

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

Получилось? Необходимо теперь получить системное время и выделить количество часов и минут. Для этого будем использовать функцию GetLocalTime() стандартной библиотеки. ПреобразуемфункциюmyDraw() следующимобразом:

void myDraw(const HDC & hdc)

{

constint x = 10;

constint y = 10;

constint radius = 100;

constdouble hour_arrow_length = radius*0.6;

constdouble min_arrow_length = radius*0.8;

constdouble sec_arrow_length = radius*0.9;

 

const Color hour_arrow_color(255,0,0,0);

const Color min_arrow_color(255,0,0,255);

const Color sec_arrow_color(255,255,0,0);

 

Color clock_border_color(255,0,0,255);

Color clock_background_color(255,255,200,255);

 

int c_x = x+radius;

int c_y = y+radius;

 

Graphics graphics(hdc);

graphics.SetSmoothingMode(SmoothingModeAntiAlias);

 

Pen pen(clock_border_color, 2);

SolidBrush brush(clock_background_color);

     

graphics.FillEllipse(&brush, x, y, 2*radius, 2*radius);

graphics.DrawEllipse(&pen, x, y, 2*radius, 2*radius);

     

SYSTEMTIME st;

GetLocalTime(&st);

int hour = st.wHour;

int min = st.wMinute;

//int sec = st.wSecond;

//int msec = st.wMilliseconds;

     

 

if (hour >= 12) hour -= 12;

 

drawArrow(&graphics, c_x, c_y, 2*M_PI*hour/12.0,

hour_arrow_length, 3, hour_arrow_color);

drawArrow(&graphics, c_x, c_y, 2*M_PI*min/60.0,

min_arrow_length, 2, min_arrow_color);

     

}

 

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: