Использование указателей bc++, страница 10

void rotate_object(double, int, int, int);// функция вращения объекта

// двумерная структура дома:

int House[17][4] =

{   /*   Start_x      Start_y       End_x         End_y       */

120,         120,         120,          200,     /* дом  */

120,         200,           80,          200,

80,         120,           80,          200,

80,         120,         120,          120,

60,         160,           80,          120,   /* крыша */

60,         160,           80,          200,

120,         155,         100,          155,     /* дверь */

100,         155,         100,          165,

100,         165,         120,          165,

90,         130,         100,          130,     /* окна  */

90,         130,           90,          140,

100,         130,         100,          140,

90,         140,         100,          140,

90,         180,         100,          180,

90,         180,           90,          190,

100,         180,         100,          190,

90,         190,         100,          190

};

//  изменяющаяся структура дома:

double HouseD[17][4]=

{

120,         120,         120,          200,     /* дом  */

120,         200,           80,          200,

80,         120,           80,          200,

80,         120,         120,          120,

60,         160,           80,          120,   /* крыша */

60,         160,           80,          200,

120,         155,         100,          155,     /* дверь */

100,         155,         100,          165,

100,         165,         120,          165,

90,         130,         100,          130,     /* окна  */

90,         130,           90,          140,

100,         130,         100,          140,

90,         140,         100,          140,

90,         180,         100,          180,

90,          180,          90,          190,

100,         180,         100,          190,

90,         190,         100,          190

};

void main(void)

{

// изменение начального положения дома

for(int i=0; i<17; i++)

{

House[i][0]+=100;

House[i][1]+=50;

House[i][2]+=100;

House[i][3]+=50;

HouseD[i][0]+=100;

HouseD[i][1]+=50;

HouseD[i][2]+=100;

HouseD[i][3]+=50;

}

int graphdriver=DETECT, graphmode, errorcode; // требование автоопределения

if ((errorcode=registerbgidriver(EGAVGA_driver))<0) // драйвер зарегистрирован?

{

cout << "Графическая ошибка:\n" << grapherrormsg(errorcode) << endl;

cout << "Для продолжения нажмите любую клавишу...";

getch();

exit;

}

// Инициализация графической системы:

initgraph(&graphdriver, &graphmode, "d:\Bc31\BGI");

if ((errorcode=graphresult()) != grOk)   //  обработка ошибки

{

cout << "Графическая ошибка:\n" << grapherrormsg(errorcode) << endl;

cout << "Для продолжения нажмите любую клавишу...";

getch();

exit;

}

settextjustify(LEFT_TEXT, TOP_TEXT); // установка штрихового щрифта

settextstyle(DEFAULT_FONT, HORIZ_DIR, 6);// горизонтальное положение

outtext("Вращение    "); // вывод текста

settextstyle(DEFAULT_FONT, HORIZ_DIR, 2);// горизонтальное положение

outtextxy(1, getmaxy()-60, "на угол 450 градусов (=2.5*3.14)");

outtextxy(1, getmaxy()-30, "вокруг окружности");

settextjustify(LEFT_TEXT, TOP_TEXT);

settextstyle(DEFAULT_FONT, VERT_DIR, 7); // вертикальное положение

outtext("Объекта"); // вывод текста

circle(290,210,28);  // рисование окружности

setcolor(WHITE);    // установка текста

display_object(16);  // рисование объекта

getch();

// вращение объекта на 450 градусов вокруг мнимой точки (окружности)

for (double k=0; k<=2.5*M_PI; k+=0.001)

rotate_object(k, 290, 210, 16);

getch();

closegraph(); //закрытие графической системы

}

void display_object(int sides)

{

for(int i=0; i<=sides; i++) // вывод Дома на экран

line(House[i][0], House[i][1], House[i][2], House[i][3]);

}

void rotate_point(double theta,int x, int y, double *xd,double *yd,int x_org,int y_org)

{

/* Вращение точки вокруг центра с координатами x_org и y_org на угол theta */