Матриця повороту. Обертання точки (об'єкта) на площині
Двовимірним поворотом об'єкта називається його переміщення по круговій траєкторії на прлощині. Параметрами даного переміщення є кут повороту і деяка точка
— центр обертання, тобто точка навколо якої здійснюється поворот даного об'єкта.

Поворот об'єкта на заданий кут навколо цннтру обертання
Для простоти, розглянемо спочатку операцію обертання точки на деякий кут, коли центр обертання міститься в початку системи координат.

Поворот точки на заданий кут відносно початку системи координат
На даному малюнку — постійна відстань від точки до початку системи координат;
— кут, який утворює радіус-вектор
з віссю
;
— кут обертання. Виходячи з того, що при обертанні відстань
не змінюється, то дану задачу прирівнюють до задачі на знаходження координатів будь-якої точки кола з радіусом
і з центром в початку системи координат, тобто координати точки
обчислюються з допомогою наступних формул:
Далі, скориставшись правилом прямокутного трикутника (), останні рівності перепишемо наступному вигляді:
У векторно-матричній формі, формула обертання точки на кут
записується наступним чином:
Таким чином ми отримали формулу, яка описує обертання точки навколо центру системи координат. Для того, щоб здійснити поворот навколо центру обертання, координати якого відмінні від центру системи координат необхідно виконати наступні дії: перемістити точку обертання в центр сиситеми координат і від координатів точки відняти кординати точки
; здійснити поворот точки на заданий кут; до координатів точки
(точка яку ми отримали після обертання) додати координати точки, яка являється центром обертання.

Поворот точки на заданий кут відносно центру обертання відмінного від початку системи координат
І на кінець давайте розглянемо, яким способом здійснюється обертання об'єкта. Для того, щоб виконати поворот об'єкта необхідно всі його точки повернути на одинаковий кут. Наприклад, для того, щоб виконати поворот багатокутника, необхідно виконати поворот всіх його вершин на заданий кут, після чого побудувати його заново по нових точках. Давайте створимо delphi-проект, який використовуючи вищерозглянуті формули, буде здійснювати поворот прямокутника на заданий кут (задається в градусах) відносно заданого центру обертання. Для цього відкриемо Delphi і розмістимо на формі компоненти, як зазначено на рисунку:

Інтерфейс програми, яка здійснює обертання прямокутника на заданий кут
Далі, для початку, опишемо три масива, елементи яких являються дійсними і цілі числами, а також створимо константу типу RECTANGLE, яка зберігає координати прямокутника.
type
VECT = array [1..2] of real;
MAS = array [1..2,1..2] of real;
RECTANGLE = array[1..4, 1..2] of integer;
const Rect: RECTANGLE = ((200, 200),(400, 200),(400, 300),(200, 300));
Після цього, створимо процедуру rotate, яка буде здійснювати поворот кожної точки прямокутника Rect на кут angle відносно центру обертання point, процедуру paint — малює прямокутник на канві форми і функцію multiply — виконує множення вектора на матрицю.
procedure TForm1.rotate(angle: real; point: VECT);
var
A: MAS;
R: RECTANGLE;
P, P1: VECT;
i, j: integer;
begin
{ Задаєм елементи матриці обертання }
A[1, 1] := Cos(angle); A[1, 2] := Sin(angle);
A[2, 1] := -Sin(angle); A[2, 2] := Cos(angle);
{ Знаходимо координати, які описують прямокутник після обертання }
for i := 1 to 4 do
begin
for j := 1 to 2 do
P[j] := Rect[i, j] — point[j];
P1 := multiply(A, P);
for j := 1 to 2 do
R[i, j] := round(P1[j] + point[j]);
end;
{ Малюємо прямокутник на канві форми }
paint®;
end;
procedure TForm1.paint(A: RECTANGLE);
var
i: integer;
begin
for i := 1 to 4 do
begin
Canvas.MoveTo(A[i, 1], A[i, 2]);
if ((i+1) <= 4) then
Canvas.LineTo(A[i+1, 1], A[i+1, 2])
else
Canvas.LineTo(A[1, 1], A[1, 2])
end;
end;
function TForm1.multiply(A: MAS; b: VECT): VECT;
var
res: VECT;
i, j: integer;
S: real;
begin
for i := 1 to 2 do
begin
S := 0;
for j := 1 to 2 do
S := S + A[i, j] * b[j];
res[i] := S;
end;
multiply := res;
end;
На наступному кроці, приступимо до програмування обробника події OnClick компонента Button1 та обробника події OnPaint головної форми проекту, яка буде малювати прямокутник Rect. Відмітимо, що саме з допомогою кнопки Button1 будемо здійснювати обертання даного прямокутника.
procedure TForm1.FormPaint(Sender: TObject);
begin
{ Малюємо на канві форми прямокутник Rect }
paint(Rect);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Point: VECT;
begin
{ Зберігаємо координати центру обертання в массив }
Point[1] := StrToFloat(Edit1.Text);
Point[2] := StrToFloat(Edit2.Text);
{ Малюємо центр обертання на канві форми }
Canvas.Ellipse(round(Point[1]-3), round(Point[2]-3), round(Point[1]+3), round(Point[2]+3));
{ Здійснюємо обертання кожної точки прямокутника і будуємо його заново }
rotate(StrToFloat(Edit3.Text)*Pi/180, Point);
end;
Далі, запустимо проект на виконання. Введемо у відповідні поля координати центру обертання та кут повороту і натиснемо кнопку Button1 («Здійснити поворот»). В результаті форма набуде наступного вигляді.

Інтерфейс програми, яка здійснює обертання прямокутни