Матриця перетворень, webreference

Матриця перетворень призначена для обчислення нових координат елемента з метою його трансформації і дозволяє встановити безліч перетворень одночасно. Розрізняють двовимірну і тривимірну матрицю, вони відрізняються один від одного розміром і простором, на який орієнтовані. Оскільки двовимірна матриця за розміром менше і тому простіше, на її прикладі розглянемо загальний принцип роботи матриць.

двовимірна матриця

Перетворення за допомогою двовимірної матриці відбувається в площині екрану, при цьому дотримується умова, що лінії завжди залишаються паралельними, тому в якості трансформації допустимі поворот, масштабування, нахил і зміна положення, але ніяк не перспектива або щось подібне. Це вже сфера зайнятості тривимірної матриці. На рис. 1 показані допустимі і неможливі перетворення, виконані за допомогою двовимірних матриць.

А ось так зробити не можна

Мал. 1. Трансформація елемента

Сама матриця має розмір 3х3 і в загальному вигляді записується так:

Іноді для простоти третій рядок опускають, оскільки вона не впливає на кінцевий результат. Нові координати кожної точки елемента виходять шляхом множення матриці перетворень на матрицю координат.

І обчислюються за такою формулою:

Роль кожного коефіцієнта матриці представлена ​​в табл. 1.

Табл. 1. Коефіцієнти матриці перетворень

Зміна масштабу по горизонталі. Значення більше 1 розширює елемент, менше 1, навпаки, стискає.

Нахил по вертикалі. Позитивне значення нахиляє вгору, негативне вниз.

Горизонтального нахилу. Позитивне значення нахиляє вліво, негативне вправо.

Зміна масштабу по вертикалі. Значення більше 1 розширює елемент, менше 1 - стискає.

Зсув по горизонталі. Позитивне значення зрушує елемент вправо на задане число пікселів, від'ємне значення зрушує вліво.

Зсув по вертикалі. При позитивному значенні елемент опускається на задане число пікселів вниз або вгору при негативному значенні.

Для матриці перетворень застосовується функція matrix (). всередині дужок перераховуються коефіцієнти.

Одинична матриця

Якщо в матриці коефіцієнти a і d рівні 1, а інші елементи матриці нульові, то така матриця називається одиничною. Ця матриця застосовується за умовчанням, оскільки не призводить до будь-якої трансформації елемента. Так що якщо необхідно провести тільки один вид перетворень, одиничну матрицю треба брати в якості основи.

Масштаб по горизонталі

Щоб збільшити розмір елемента, допустимо, в два рази по горизонталі, коефіцієнт a слід встановити рівним 2, а інші коефіцієнти залишити як в одиничній матриці.

Вважаємо нові координати:

x '= 2 * x + 0 * y + 0
y '= 0 * x + 1 * y + 0

Код для масштабування показаний в прикладі 1.

Приклад 1. Масштабування

Результат даного прикладу показаний на рис. 2. Блок з текстом розтягується на 20% по горизонталі.

Матриця перетворень, webreference

Мал. 2. Зміна масштабу тексту

Для відображення елемента по горизонталі слід встановити a = -1. по вертикалі d = -1 або обидва значення одночасно для відображення одним разом по горизонталі і вертикалі.

У прикладі 2 показано відображення тексту по вертикалі.

Приклад 2. Відображення

Результат даного прикладу показаний на рис. 3.

Матриця перетворень, webreference

Мал. 3. Відображення тексту по вертикалі

За нахил відповідають коефіцієнти b і c. які і впливають на вигляд елемента. Давайте встановимо c = 1 і подивимося, які перетворення вийдуть.

x '= 1 * x + 1 * y + 0
y '= 0 * x + 1 * y + 0

Таким чином, змінюється тільки координата x. яка збільшується на значення y. що і призводить до нахилу елемента. У прикладі 3 використовується від'ємне значення коефіцієнта c для нахилу вправо.

Приклад 3. Нахил

Результат даного прикладу показаний на рис. 4.

Матриця перетворень, webreference

Мал. 4. Нахил блоку

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

Сам поворот відбувається за годинниковою стрілкою, α задає кут повороту в градусах.

переміщення

За зрушення елемента по горизонталі відповідає коефіцієнт tx. а по вертикалі ty. Значним виступає число пікселів.

тривимірна матриця

Тривимірна матриця має розмір 4х4 і застосовується для перетворення координат елемента в тривимірному просторі. У загальному вигляді вона виглядає так:

Матриця перетворень, webreference

Назва «тривимірна» лише відображає той факт, що матриця призначена для роботи в 3d-просторі. Двовимірна матриця є її окремим випадком і для розміру 4х4 має наступний вигляд:

Матриця перетворень, webreference

У чистому вигляді ця матриця застосовується рідко через свою складність і наявності зручних функцій для трансформації в просторі. Якщо вам цікава тригонометрія і формули перетворень одних координат в інші, то почитайте цей матеріал.