| imho.ws |
![]() |
|
|
|
# 1 |
|
Junior Member
Регистрация: 21.04.2005
Сообщения: 117
![]() |
Всем привет!
Помогите плз кто-нибудь, надо сделать аналоговые часы на С++ (класс и методы), причем при передвижении стрелок надо, чтобы перерисовывались не все часы, а только стрелки. Думаю, что кто-нибудь (если не многие ) это уже делал, хелп плз! Да, надо чтобы ЭТО откомпилилось в dev c++, почти забыл.Спасибо заранее! Последний раз редактировалось ktulu; 14.11.2005 в 22:15. |
|
|
|
|
# 2 | |
|
Junior Member
Регистрация: 19.11.2004
Адрес: Dnepropetrovsk
Пол: Male
Сообщения: 67
![]() |
Цитата:
Весь класс приводить не буду - большой. функция которая рисует стрелки выглядит примерно так: Код:
void CClock::RotatePoint(POINT pt[],int num,double angle){
POINT ptTemp;
for(int i=0;i<num;i++){
//TWOPI = (2*3.14159)
ptTemp.x = (int)(pt[i].x *cos(TWOPI*angle/360)+
pt[i].y*sin(TWOPI*angle/360));
ptTemp.y = (int)(pt[i].y *cos(TWOPI*angle/360)+
pt[i].x*sin(TWOPI*angle/360));
pt[i] = ptTemp;
}
}
void CClock::DrawArrows(CDC *pDC, CTime &tm){
//сразу описываешь массив - по этим координатам потом будешь
//рисовать
static POINT pt[3][11] = {
0, -50,-50, 0,-5, 40,-5, 100,-30, 120,0, 600, 30,
120, 5,100, 5,40, 50,0, 0,-50, 0,-40, -40, 0,-5, 30,-5,
90, -20, 110,0,800, 20,110,5,90,5,30,40,0,0,-40,0,-100,-5,
-100,-5,-100,-5,-100,-5,-100,0,850, 5,-100,5,-100,5,-100,0,-100};
double Angle[3];
//Вычисляешь угол поворота
Angle[0] = (tm.GetHour()*30)%360+tm.GetMinute()/2;
Angle[1] = (tm.GetMinute()*60+tm.GetSecond())/10.0;
Angle[2] = (tm.GetSecond()*6);
POINT ptTemp[3][11];
memcpy(ptTemp,pt,sizeof(pt));
for(int i = 0;i<3;i++){
RotatePoint(ptTemp[i],11,Angle[i]);
pDC->Polygon(ptTemp[i],11);
}
}
__________________
|
|
|
|