С для профессиональных программистов




Вращение обьекта - часть 2


/* Вращение заданных объектов */

void rotate_object(ob, theta, x, y, sides)

double ob[][4]; /* описание объекта */

double theta;   /* угол поворота в радианах */

int x, y;

int sides;

register int i, j;

double tempx, tempy;

char ch;

for(;;)

ch = getch(); /* ввод признака направления вращения */

switch(tolower(ch))

case 'l': /* вращение против часовой стрелки */

theta = theta < 0 ? -theta : theta;

break;

case 'r': /* вращение по часовой стрелке  */

theta = theta > 0 ? -theta : theta;

break;

default: return;

for(j=0; j<=sides; j++) /* стирание старых линий  */

line((int) ob[j][0], (int) ob[j][1],

(int) ob[j][2], (int) ob[j][3], 0); rotate_point(theta, &ob[j][0],

&ob[j][1], x, y);

rotate_point(theta, &ob[j][2], &ob[j][3], x, y);

line((int) ob[j][0], (int) ob[j][1],

(int) ob[j][2], (int) ob[j][3], 2);

Как показано в описании параметров функции rotate_object(), вращение осуществляется вокруг центра, заданного координатами X и Y, на угол, величина которого задана параметром theta в радианах. Минимальное значение параметра theta равно 0.01 радиан. Заметим, что объект сначала стирается из старой области размещения, а затем перерисовывается вновь. Если это условие не может быть выполнено, то экран окрашивается в голубой цвет. Необходимым условием выполнения программы rotate_object() является обязательное задание параметра sides.

Приведенная ниже функция display_object() не имеет отношения к вращению объектов, но она может быть полезна при работе с объектами. Она рисует на экране объекты, определенные в массиве ob.

/* отображение объекта на экране */

void display_object(ob, sides)

double ob[][4];

int sides;

register int i;

for(i=0; i<sides; i++)

line((int)ob[i][0], (int)ob[i][1],

(int)ob[i][2], (int)ob[i][3], 2);

В качестве иллюстрации удобства использования функций вращения объектов ниже приводятся программы вращения изображения дома. На рисунке 4-4 показано изображение на экране терминала дома при различных углах поворота вокруг собственного центра. Прямоугольник, обрамляющий изображение вращаемого дома, поможет вам правильно оценить масштаб и перспективу.




Содержание  Назад  Вперед