Що такого різного / складного / корисного у векторах?


21

Пробачте, якщо це не вважається справжнім питанням, але я щось щиро плутаю.

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

Отже, нарешті я заглянув Вектор у Вікіпедію і здивувався. Якщо я якимось чином не помиляюся, вектор (для простоти, скажімо, це 2D) - це лише координати x і y. Якщо я неправильно зрозумів, виправте мене.

Тож ось моє запитання: чи не означає це, що будь-яке представлення двох (або трьох) розмірних координат є вектором? Якщо так, то вектори та координати - це те саме. І створити гру без використання координат майже неможливо , тож як вектори заплутані чи нові для того, хто зробив будь-яку кількість ігрових програмувань?

Це те, на чому я міг би скористатися деякими поясненнями. Будь-яка допомога вдячна.


5
Вектори досить прості, поки ви не почнете робити обертання в 3D ... тоді вам потрібні кватерніони, і вони підірвуть ваш розум.
Алістер Бакстон

Поняття вектора справді заплутане. Я запитав математику, math.stackexchange.com/questions/429363 , math.stackexchange.com/questions/384927, але не отримав чіткої відповіді. Це чисто розчарування. Можливо, ви можете додати його.
Val

1
З усіма поганими аналогіями в цих відповідях недарма люди плутаються.
Алістер Бакстон

Відповіді:


29

Не дозволяйте математику з великої математики почути, як ви називаєте пункти або координати векторів!

2D вектор має x і y компонент , а не координату. Вектори не визначають положення, вони визначають напрямок і величину.

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

Вектори та координати - це не одне і те ж. Вони схожі, але спосіб їх використання дуже різний.

Координати визначають позицію у світі. Вектори визначають напрямок і величину. Вони часто використовуються разом. Як приклад:

У персонажа є позиція і швидкість. Позиція - це координата, а швидкість - вектор. Додавання швидкості до позиції перемістить символ у напрямку вектора на відстань, визначену величиною вектора (зверніть увагу, що величина вектора - це швидкість, тому це дає нам напрямок і швидкість).

Або в цьому прикладі:

введіть тут опис зображення

Два символи мають положення, а лазерний знімок - вектор. Вектор між двома позиціями дорівнює (3,1). Це означає, що він рухається +3 по осі X і +1 по осі Y. Де величину можна знайти за допомогою Sqrt ((X X) + (Y Y)).

Хороший огляд векторної математики можна знайти в блозі Wolfire


7
Хвилюються не лише математики, коли хтось називає векторну точку або координату. Нас, фізики, теж зіпсуєш тебе.
TASagent

2
+1 Але якщо я збираю нітки, швидкість - це вектор, а швидкість - величина цього вектора.
Ergwun

2
@Val: Я б не сказав, що це дурниці. У ньому йдеться про помилкове уявлення про те, що вектори є лише x- і y-координатами. Зробити відповідь більш формальною або точною, згадуючи "елементи векторного простору", нікому не принесе користі, крім того, щоб допомогти пояснити, чому люди вважають, що векторна алгебра залякує.
Маркс Томас

3
Вектори є лише позицією в тому, що вони говорять вам, де ви знаходитесь, якби ви застосували їх до (0,0). Вектори можуть змінювати позицію, але не містять у собі інформації про позицію. Я розумію, що ти кажеш. Я думаю, що різниця, про яку ми говоримо, не суттєва для цього питання. Це спосіб використання векторів при розробці ігор. Дякуємо за ваш внесок
MichaelHouse

4
@ Val: будь-яка гарна лекція лінійної алгебри погодиться з Byte56: вектори не збігаються з позиціями в просторі . Є сенс додати "3 милі на північ і 1 милю на схід" до "1 миля на південь"; але не має сенсу додавати "позицію Білого дому" до "позиції Пентагону". Після того як ви зафіксуєте точку відліку як (0,0), ви можете використовувати вектори для визначення точок, і навпаки, тому в деяких уявленнях вони виглядають подібними; але вони різні. Абстрактно: порівняйте афінний простір та векторний простір .
PLL

9

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

Крім того, принаймні в США люди, які пройшли типову математичну послідовність середньої школи, звикли думати про геометрію з точки зору ліній, нахилів, кутів тощо. Їм доводиться певною мірою вивчати цей предмет і вчитися подумайте про це з точки зору векторів та матриць. Справа не в тому, що поняття лінійної алгебри є такою розтяжкою, а в тому, що вони є дещо іншим набором понять, ніж ті, які використовуються в класичній геометрії, яких люди, ймовірно, дізналися в школі.


До речі, відмінність між векторами і точками полягає в операціях, які ви можете виконувати над ними. Хоча обидва представлені (у певній системі координат) списком компонентів і тому виглядають «однаково», дозволені операції не є однаковими. Наприклад, ви можете додати два вектори або помножити вектор на скаляр. Ви не можете зробити це з очками - або, принаймні, це не має сенсу робити. Але можна відняти дві точки, і результат - вектор від однієї точки до іншої. Ви також можете додати точку до вектора, щоб отримати нову точку.

Окуляри та вектори також поводяться по-різному щодо перетворень. А саме, бали підлягають перекладу, тоді як вектори - ні. Розглянемо на прикладі переміщення об'єкта з позицією (точкою) та швидкістю (вектором); якщо ви перекладете об’єкт в інше місце, ви зміните його положення, але не його швидкість.

Насправді, продовжуючи цю лінію міркувань, існують не просто вектори; Є й інші сутності, як ковектори та бівектори , які також можуть "виглядати" вектором з точки зору наявності списку компонентів в системі координат, але вони поводяться по-різному з точки зору доступних операцій та способу реагування на перетворення. Всі вони належать до галузі математики під назвою алгебра Грассмана . Крім того, можна бути ще більш загальним і розглядати тензорну алгебру . Це, однак, передові речі.


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

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

1
@AlistairBuxton Я не дотримуюся вашої точки зору - якщо ви перекладете систему координат, не змінюються ні швидкість, ні прискорення об'єкта, але якщо ви обертаєте координати, то і швидкість, і прискорення повертаються. Тож я не бачу, де щось "ламається".
Натан Рід

2
@AlistairBuxton І немає такого поняття, як "зберігати позиції як вектори". Ігри зберігають як позиції, так і вектори як списки скалярних компонентів у певній системі координат. Це не робить їх однаковим. Щоб зробити аналогію: int і floats обидва зберігаються як список бінарних бітів, але означають різні речі та мають різні операції.
Натан Рід

1
@Val Ви повністю поза базою. Вектор не є [p-положення, v-швидкість]. Він не має як точки, так і швидкості всередині себе. Це просто [x-швидкість, y-швидкість, z-швидкість] (для вектора швидкості). Справа в тому, що це різний тип речі від [x-положення, y-положення, z-положення].
Натан Рід

7

Вектори насправді не такі вже й погані. Існує лише трохи математики, з якою люди незнайомі.

По-перше, вектор не представляє позиції в просторі. Це концептуально дуже важливо. Вектор представляє напрямок, як "Північ", і величину. На карті з нормальними координатами Math XY "Північ" буде вектором (0,1) (вгору по осі Y). Це не слід плутати з положенням (0,1), яке знаходиться на одну одиницю вище, де б ви не ставили походження. Вектор - це напрямок і величина .

Зсув (рух) - вектор (наприклад, переміщення двох одиниць вгору і одна одиниця вправо), Позиція - ні.

Самі по собі вектори - це не те, з чим у людей проблеми. Зазвичай це матриці та операції над векторами.

Наприклад, якщо ви помножите вектор на спеціальну матрицю, що називається "Матриця обертання", то вектор обертається на величину, вказану матрицею. Крім того, деякі люди мають проблеми з множенням матриць. Подивіться, якщо ви не знайомі з цим.

Крім того, ви можете "складати" ці матриці (або операції) разом. Як і поверніть на 90 градусів навколо осі X, потім поверніть на 90 градусів навколо осі Y. Якщо ми назвемо першу матрицю M, а другу - матрицю N, то операція буде v * M * N. Однак множення матриці не є комутативним, так що це не те саме, що v * N * M.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.