Что такого особенного / сложного / полезного в векторах?


21

Простите, если это не считается реальным вопросом, но это то, что я искренне смущен.

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

Итак, наконец-то я посмотрел Vector в Википедии и был удивлен. Если я не ошибаюсь, вектор (для простоты, скажем, 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 Но если я не выбираю, скорость - это вектор, а скорость - это величина этого вектора.
Эргвун,

2
@Val: я бы не сказал, что это чепуха. В нем рассматривается неправильное представление вопроса о том, что векторы являются просто координатами x и y. Если сделать ответ более формальным или точным, упомянув «элементы векторного пространства», это никому не поможет, если только не поможет объяснить, почему люди находят пугающую векторную алгебру.
Томас Томас

3
Векторы - это только позиция, в которой они сообщают вам, где бы вы были, если бы применили их к (0,0). Векторы могут изменять положение, но сами по себе не содержат информации о положении. Я понимаю, что вы говорите. Я думаю, что разница, о которой мы говорим, не имеет существенного значения для этого вопроса. Именно так векторы используются в разработке игр. Спасибо за ваш вклад.
MichaelHouse

4
@Val: любая хорошая лекция по линейной алгебре согласуется с Byte56: векторы не совпадают с позициями в пространстве . Имеет смысл добавить «3 мили на север и 1 милю на восток» к «1 миле на юг»; но не имеет смысла добавлять «позицию Белого дома» к «позиции Пентагона». Как только вы определите точку отсчета как (0,0), вы можете использовать векторы для определения точек, и наоборот, поэтому в некоторых представлениях они выглядят одинаково; но они разные. Абстрактно: сравните аффинное пространство с векторным пространством .
PLL

9

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

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


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

Точки и векторы также ведут себя по-разному относительно преобразований. А именно, точки подлежат переводу, а векторы - нет. Рассмотрим пример объекта, движущегося с позицией (точка) и скоростью (вектор); если вы переводите объект в другое место, вы изменяете его положение, но не его скорость.

Фактически, продвигая эту линию рассуждений, существуют не только векторы; Существуют и другие объекты, такие как ковекторы и бивекторы , которые также могут «выглядеть как» вектор с точки зрения наличия списка компонентов в системе координат, но ведут себя по-разному с точки зрения доступных операций и способа, которым они реагируют на преобразования. Все они принадлежат к области математики, называемой алгеброй Грассмана . Помимо этого, можно быть еще более общим и рассмотреть тензорную алгебру . Это продвинутый материал, хотя.


1
Большая часть моего замешательства заключалась в том, почему люди думали, что векторы были такими сложными, и это помогло. Возможно, я нахожу их простыми, потому что я фактически использовал геометрию в программировании еще до того, как начал изучать геометрию в средней школе.
звездный пейзаж

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

1
@AlistairBuxton Я не слежу за вашей точкой - если вы переводите свою систему координат, ни скорость объекта, ни ускорение не меняются, но если вы поворачиваете координаты, то и скорость, и ускорение будут вращаться. Так что я не вижу, где что-то «ломается».
Натан Рид

2
@AlistairBuxton И нет такой вещи, как «хранить позиции как векторы». Игры хранят как позиции, так и векторы как списки скалярных компонентов в определенной системе координат. Это не делает их одинаковыми. Чтобы сделать аналогию: целые числа и числа с плавающей запятой оба хранятся в виде списка двоичных разрядов, но означают разные вещи и имеют разные операции.
Натан Рид

1
@Val Ты совсем не в базе. Вектор не является [p-позиция, v-скорость]. В нем нет ни точки, ни скорости. Это просто [x-скорость, y-скорость, z-скорость] (для вектора скорости). Дело в том, что это другой тип вещей, чем [x-position, y-position, z-position].
Натан Рид

7

Векторы действительно не так уж и плохи. Есть только немного математики, с которой люди незнакомы.

Прежде всего, Вектор не представляет позицию в пространстве. Это концептуально очень важно. Вектор представляет направление, например «север», и величину. На карте с нормальными математическими координатами 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.