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


Вращение точки в плоскости экрана


Вращение точки в плоскости экрана (двумерном пространстве) представляет собой довольно простую задачу в декартовой системе координат. Вы можете вспомнить из курса аналитической геометрии, что вращение точки вокруг центра на угол theta, описывается формулой:

new_x = old_x * cos(theta) - old_y * sin(theta)

new_y = old_x * sin(theta) - old_y * cos(theta)

Единственной сложностью при употреблении этих формул для графических дисплеев будет являтся тот факт, что экран дисплея не является декартовым пространством. Декартовы оси определяют 4 квадранта, как это показано на рисунке 4-2. Однако экран терминала представляет собой один из квадрантов, оси X и Y в котором перевернуты. Для решения этой проблемы необходимо определить новый центр и привести в соответствие координаты X и Y экрана и координаты осей декартова пространства. Любая точка на экране может быть использована в качестве центра, но обычно центр определяется как можно ближе к центру объекта, который мы собираемся вращать. Функция rotate_point(), приведенная ниже, вычисляет величину новых значений X и Y для заданного угла вращения.

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

x_org и y_org на угол theta */

void rotate_point(theta,x,y,x_org,y_org)

double theta,*x,*y;

int x_org,y_org;

double tx,ty;

/* нормализация X и Y к начальному адресу */

tx=*x-x_org;

ty=*y-y_org;

/* вращение */

*x=tx*cos(theta)-ty*sin(theta);

*y=tx*sin(theta)-ty*cos(theta);

/* возвращение значений координат */

*x+=x_org;

*y+=y_org;

 

Заметим, что rotate_point() изменяет параметры X и Y путем присвоения им требуемого значение для получения угла вращения, заданного переменной theta. Угол вращения задается в радианах.



Декартова система координат Y

II ^ I

+,- | +,+

|

|0.0

------------------- X

|

-,- | -,+

|

III ј IV

0.0 Графический экран ----------- Y

|

| +,+

|

ј

X

Рис. 4-2. Декартовы координаты на графическом экране.



Содержание раздела