Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Движение обьекта

63K
15 ноября 2010 года
Lulik
7 / / 15.11.2010
есть несколько классов геометрических фигур.
Сначала надо было организовать просто движение любого из классов.
 
Код:
 

void FigureMove(GeomFigure* pFig,int dx,int dy, int dtime, int count);
int main(void)
{
int gdriver = DETECT, gmode, errorcode;
initgraph(&gdriver, &gmode, PATCHTODRIVER);
errorcode = graphresult();
if (errorcode != grOk)
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}

int maxx, maxy; maxx = getmaxx(); maxy = getmaxy();
int x0,y0; x0= maxx/2; y0=maxy/2;
Circle A1(50,300,240); A1.Draw();
// ColorRect S1(30,50,150,100,2,3,4,5);
/// S1.Draw();

getch();
ColorRect S2(0,360,200,100,BLUE,GREEN,RED,BROWN,YELLOW); S2.Draw();

///+ FigureMove(&A1,15,5,750,12);

// FigureMove(&S1,5, -3, 150, 20);
// getch();

FigureMovebyCircle (&S2,20,20,20);
getch();
closegraph();
return 0;


}

/*void FigureMove(GeomFigure* pFig,int dx,int dy, int dtime, int count)
{
for(int i=1; i<=count; i++)
{
pFig->Draw();
delay(dtime); // getch();
pFig->Hide();
pFig->Shift(dx,dy);

}
}


 
Код:
 




а теперь надо сделать движение по кругу(класс Circle) другого класса Например (colortxtrect)
37K
15 ноября 2010 года
freets
97 / / 15.10.2010
используй сферические координаты:
 
Код:
x=r*cos(f)
y=r*sin(f)
f+=df


f - угол
df - приращение угла
r - радиус окружности
63K
15 ноября 2010 года
Lulik
7 / / 15.11.2010
спасибо.
а делать тоже в цикле?
и получается будет 5 переменных?
37K
15 ноября 2010 года
freets
97 / / 15.10.2010
Цитата: Lulik
спасибо.
а делать тоже в цикле?
и получается будет 5 переменных?



ессна, там где приращение - там обычно и цикл...

63K
16 ноября 2010 года
Lulik
7 / / 15.11.2010
 
Код:
 
void FigureMovebyCircle (GeomFigure* Circle, int dtime, int count,int Radius,int x0,int y0);


void FigureMovebyCircle(GeomFigure* Circle, int dtime, int count, int Radius, int x0,int y0)
{
///Radius=R;


;
for(int i=1; i<=count; i++)
{
Circle->Draw();
delay(dtime); // getch();

dx=R*cos(f);
dy+R*sin(f) ;
f+=df

pFig->Shift(dx,dy);

// Circle(10.10.50);
// Circle-> delay; // getch();

Circle->Hide();
Circle->Shift(x0,y0);

}
}
 
Код:
 



не получается(
26K
16 ноября 2010 года
U2D
34 / / 17.07.2007
 
Код:
double df = 2*M_PI/count;
for (double f = 0; f<=2*M_PI; f+=df)
{
double x = R*cos (f);
double y = R*sin (f);
Circle->Shift(x,y);
delay(dtime);
}
63K
16 ноября 2010 года
Lulik
7 / / 15.11.2010
а что значит эта строчка?

double df = 2*M_PI/count;
26K
16 ноября 2010 года
U2D
34 / / 17.07.2007
Ну насколько я понял count это колличество шагов.
Деля 2*M_PI (два пи) на число шагов, мы получаем приращение.
Поправь, если я недопонял.
63K
19 ноября 2010 года
Lulik
7 / / 15.11.2010
движение происходит, но не по кругу(((
63K
19 ноября 2010 года
Lulik
7 / / 15.11.2010
void FigureMovebyCircle(GeomFigure* pFig, int dtime, int count, int Radius, int x0,int y0)
{
pFig->Shift(x0,y0);

double df=2*M_PI/count;
for (double f=0; f<=2*M_PI; f+=df)

{

double dx=Radius*cos(f)+Radius*df;
double dy=Radius*sin(f)+Radius*df;


pFig->Draw();
delay(dtime);
pFig->Shift (dx,dy);

}

}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог