вигляд:
,
і навколо осі:
В
Зверніть увагу на зміну положення синуса кута з негативним знаком в матриці повороту навколо осі. Правильність цих матриць легко перевірити поворотом одного з ортов на, при цьому він повинен перейти в наступний по порядку орт на відповідній координатної осі. p> Зворотні перетворення будуть виражатися зворотними матрицями. Для операції перенесення треба лише замінити знаки компонент вектора перенесення на протилежні:
;
для операції масштабування - на зворотні значення:
для повороту - вибором негативного кута повороту:
.
Результатом декількох послідовних поворотів буде матриця
.
Тут верхня матриця розміром називається ортогональної. Важливим її властивістю є те, що обернена до неї матриця є транспонованою:. Це корисно тим, що при обчисленнях досить поміняти індекси місцями і зворотне перетворення виходить автоматично. p> Після перемноження будь-якого числа матриць виду і результуюча матриця завжди буде мати вигляд:
.
Тут верхня частина розміром визначає сумарний поворот і масштабування, а три коефіцієнта останнього рядка - сумарний перенос.
Використовуючи вищевикладений математичний апарат, можна скласти наступну програму на мові програмування Turbo Pascal.
Лістинг програми:
Uses Graph, Crt; {підключення графічного і текстового модуля}
Const N = 8; {постійні 8 граней, 12 ребер}
M = 12;
Type Coord = record {опис типів, використовуваних програмою}
X, Y, Z: Real;; = record, E, C, d: Word;;
Var {Рездел опису змінних}
grDriver: Integer; {Змінні для роботи в графічному режимі}
grMode: Integer;: Array [1 .. N] of Coord;: Array [1 .. M] of Rebro;: Char;: Byte;, C: Coord;, Uy, Uz: Real; Tr3d (P , T: Coord; Var R: Coord); {Процедура розрахунок значень 3-х векторів} Matrix = Array [1 .. 4,1 .. 4] Of Real; I, J: Byte;: Matrix; I: = 1 To 4 Do For J: = 1 To 4 Do If I = J Then O [I, J]: = 1O [I, J]: = 0; [1,4]: = TX; [2,4]: = TY; [3,4]: = TZ;. X: = O [1,1] * PX + O [1,2] * PY + O [1,3] * PZ + O [1,4];. Y: = O [2,1] * PX + O [2,2] * PY + O [2,3] * PZ + O [2,4];. Z: = O [3,1] * PX + O [3,2] * PY + O [3,3] * PZ + O [3,4];; Sr3d (P, S: Coord; Var R: Coord); {розрахунок зміни масштабу} Matrix = Array [1 .. 4,1 .. 4] Of Real; I, J: Byte;: Matrix; I: = 1 To 4 Do For J: = 1 To 4 Do If I = J Then O [I, J]: = 1O [I, J]: = 0; [1,1]: = SX; [2,2]: = SY; [3,3]: = SZ;. X: = O [1,1] * PX + O [1,2] * PY + O [1,3] * PZ + O [1,4];. Y: = O [2,1] * PX + O [2,2] * PY + O [2, 3] * PZ + O [2,4];. Z: = O [3,1] * PX + O [3,2] * PY + O [3,3] * PZ + O [3,4]; ; UX3d (P: Coord; Teta: Real; Var R: Coord); {розрахунок обертання навколо осі x} Matrix = Array [1 .. 4,1 .. 4] Of Real; I, J: Byte;: Matrix; I: = 1 To 4 Do For J: = 1 To 4 Do If I = J Then O [I, J]: = 1O [I, J]: = 0; [2,2]: ...