Чим відрізняється точкове перетворення від векторного перетворення?


11

Це те, що сказав мій лектор у курсовій роботі:

Ми розглянемо лише 4 * 4 матриці. Вони використовуються для обертання, масштабування або перекладу об'єктів (або будь-якої комбінації цих операцій). Матриці також використовуються пізніше при реалізації моделі віртуальної камери. Якщо ви не знаєте різниці між векторним перетворенням і перетворенням точки, погляньте на це.

Я не можу знайти відповідь і зареєстрував цей веб-сайт лише для цього питання.


1
На додаток до всіх інших відповідей і тому, що інші люди вже відповіли на це запитання в іншому місці, ви можете перевірити: scratchapixel.com/lessons/…
користувач18490,

Відповіді:


9

Ось проста відповідь.

У 4D, щоб можна було помножити їх на матрицю 4x4, вектори представлені у вигляді (x, y, z, 0), а точки представлені у вигляді (x, y, z, 1).

Оскільки 4-й рядок матриці 4x4 являє собою переклад матриці, вищезазначені уявлення дозволяють зробити так, що на точки впливає переклад, але вектори - ні.

Обертання, масштабування тощо впливають як на вектори, так і на точки.

Caveat:

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


Нормали не працюють, тому що вони не вектори. Не знаю, як добре вводити цю концепцію.
МБ Рейнольдс

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

2
поверхневі нормали - це бівектори, а не вектори. Ми можемо знайти нормальне по поперечному добутку двох векторів, результат - бівектор. ПЕРЕГЛЯДИ Per Vogensen's: gist.github.com/pervognsen/c6b1d19754c2e8a38b10886b63d7bf2d
MB Reynolds

4

З того, що я дізнався, оскільки я також студент, - це те, що ви хочете працювати з матрицями розміром , щоб обробляти обертання, масштабування та переклади так само, тобто множення на матрицю (тобто, 4 × 4 матриці).4×44×4

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

Тепер питання: як ми переходимо від 3D координатних систем до 4D ? Відповідь - « однорідні координати ».

Отже, що це означає? Ми побудуємо матриці для представлення обертання, масштабування та перекладу, так що ми використовуємо лише множення матриць для представлення перетворень (наприклад, обертання, масштабування тощо). Як ми їх конструюємо окремо, це конкретніше, але ви можете подивитися в Інтернеті.4×4

На даний момент у нас є матриці та тривимірні вектори, що ще не корисно, оскільки ви не можете множити 4 × 4 матриці та 3 D вектори, оскільки розміри не відповідають. Ось чому, працюючи з домашніми координатами, нам також потрібно перетворити наші задані 3D-точки у відповідні 4D.4×44×43D

Як ми це робимо?

Ми розрізняємо напрямок і положення вектори. Напрямні вектори, як випливає з назви, мають напрямок, в якому вони вказують; ми також піклуємося про їх довжину, але переклади на них не впливають, оскільки нас не цікавить їх позиція. Вектори позиції (або просто "точки") можна перекладати або переміщувати; вони зазвичай представлені відносно походження, тобто як вектор від початку і до самої точки.

Перетворюємо 3D-вектори напрямку, додаючи в якості 4- ї координати відповідного однорідного вектора: додаємо нуль, оскільки це в основному виключає ефект перекладів. Ми робимо аналогічну річ з векторами позиції, але замість 0 додаємо 1 , з протилежної причини.0401

Наприклад, якщо у нас напрямок вектора v = ( v 1 v 2 v 3 ) , ми перетворюємо його, роблячи v = ( v 1 v 2 v 3 0 ) . Аналогічно, якби у нас був точковий вектор u = ( u 1 u 2 u 3 ), ми перетворимо його на u = ( u 1 u 2 u 3 1 )3Dv=(v1v2v3)v'=(v1v2v30)у=(у1у2у3)у'=(у1у2у31)

Примітка: для перетворення з однорідних координат назад у відповідні , ви не можете просто видалити 4 t h координату, якщо вона все ще не дорівнює 1 (або 0 відповідно).3D4тгод10


(шх,шу,шz,ш)ш0(х,у,z)ш=1швикористовуючи також 4D-матричне множення.
Ільмарі Каронен

2

Якщо ви шукаєте визначення вектора і точки, то вектор є:

Така кількість, як швидкість, повністю задана величиною та напрямком. http://www.thefreedictionary.com/vector

І справа в тому, що:

Безрозмірний геометричний об'єкт, що не має властивостей, крім місця розташування. http://www.thefreedictionary.com/point

Тож можна сказати, що вектор - це напрямок із масштабом, а точка - місцем.

Отже, якщо ви трансформуєте вектор, ви просто обертаєте його та масштабуєте. З точкою ви також перекладаєте її (обертання та масштабування точки є навколо початку, оскільки це лише місце, де сама точка не може бути повернута).

Більшість разів вектор і крапка поміщаються в один контейнер, вектор з 4 компонентами. Єдина відмінність - w компонент. Якщо w компонент дорівнює 0, то це напрямок. Якщо це 1, то вектор - це точка.

Причину цього можна знайти в самій матриці. Він використовує спосіб множення вектора на 4 компоненти з матрицею 4x4. Якщо ви не знаєте, як це працює, я б запропонував швидкий google.

[rот+сcалеrот+сcалеrот+сcалетrанслатiонrот+сcалеrот+сcалеrот+сcалетrанслатiонrот+сcалеrот+сcалеrот+сcалетrанслатiон0001]

Як бачите, якщо останній компонент дорівнює 0, то у вас є множення на 0, отже, результат 0 і немає перекладу.

Це полегшує роботу в комп'ютерній графіці з полігональними об'єктами. У вас є однакова матриця перетворення для перетворення позицій, але і нормали. Оскільки нормалам встановлено, що їх w компонент встановлений на 0, а компонент w позиції - 1, нормали просто повертаються (а також масштабуються, що може призвести до деяких дивних речей, тому більшість випадків нормалізація нормалізується після цього. Це не так " t насправді рекомендується використовувати ту саму матрицю для позицій та обертань через дивні речі! Подивіться на коментар @JarkkoL.) і позиції перекладаються (і обертаються та масштабуються навколо походження).

Сподіваюся, я не помилився: P, і це вам допомогло!


2
Нормали не перетворюються з тією ж матрицею перетворення, що і позиції. Вам потрібно обчислити зворотну транспозицію підматриці 3x3, щоб правильно трансформувати нормалі для перетворень з нерівномірним масштабуванням та / або перекосом.
JarkkoL

@JarkkoL так, це правда, ти маєш рацію з цим. Найкраще не використовувати одну і ту ж матрицю, але в залежності від реалізації це робиться. У більшості випадків люди так сильно не переймаються перекосом норми, оскільки вони взагалі не використовують нерівномірне масштабування або масштабування. Ця частина про перетворення позицій і нормалів була більш про те, що може бути корисно використовувати один контейнер.
bram0101
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.