Какие векторы?
Векторы - это наборы координат различного размера. Каждая координата в векторе представляет некоторую абсолютную позицию в том направлении пространства, в котором находится вектор.
- 1-D вектором будет {1} . Это может быть, например, позиция в X = 1. Или время t = 1.
- Двумерный вектор будет {-4,3} . Это может быть, например, положение в точке -4 на оси X и 3 на оси Y. Это также может быть температура (3 градуса) в положении (-4 метра) назад по оси X.
- Трехмерный вектор будет {1,2,3} . Это может быть положение в пространстве 1 вдоль оси X, 2 назад на оси Y и 3 вверх на оси Z. Или это может быть 1 красный, 2 зеленых и 3 синих цвета. Или это может быть позиция XY ( {1,2} ) в некоторый момент времени T ( {3} ).
Обратите внимание, что во всех случаях мы присваивали значения векторам нашей задачи. Хотя вы обычно найдете векторы, используемые для геометрии в играх, нет причин, по которым вы не можете делать с ними что-то еще.
Почему я использую векторы?
Во-первых, вам никогда не придется использовать векторы. Пока вы отслеживаете x и y или любые другие координаты, которые вас интересуют, в некотором смысле вы в порядке.
Однако преимущество использования векторов заключается в том, что они аккуратно представляют такие вещи, как направление и положение, а также имеют несколько математических операций, которые облегчают вашу жизнь.
Для простого примера рассмотрим точечное произведение .
Предположим, у вас есть радарная система в стиле сверху вниз. Каждый враг, который появляется в секторе радара (какой-то клиновидный клин в 2D), должен получить маленькую красную точку на вашем экране. Итак, вам нужно выяснить, какие враги в вашем разделе радара.
Вы можете проверить, находятся ли враги внутри треугольника. Вы также можете проверить, содержатся ли враги на пересечении двух полупространств плоскостей / линий, определяющих две стороны сектора радара.
Или вы можете просто использовать точечный продукт для проверки. Вот как:
- Создайте вектор, идущий от центра радара к «передней части радара». Нормализуй это.
- Создайте вектор, идущий от центра радара к объекту, для которого мы хотим проверить видимость радара. Нормализуй это.
- Возьмем скалярное произведение двух нормализованных векторов.
- Возьмите арккозин этого продукта и убедитесь, что он меньше половины ширины радара. Если это так, нарисуйте блик.
Это очень удобно, а также позволяет вам легко иметь радары, которые указывают в разных направлениях (просто измените прямой вектор) и имеют разную ширину (просто измените угол ширины радара) - и вы можете повторно использовать один и тот же код для этих случаев !
Почему еще я использую векторы?
Если вы находитесь в 2D, возможно, лучший способ достижения сложных эффектов и движений (вращение, масштабирование и т. Д.) - это использование графа сцены. У планеты есть орбитальный корабль, у корабля есть орбитальный дрон. Расчет для этого без использования векторной математики действительно, очень уродлив.
С векторной математикой мы представляем каждый как имеющий точку и матрицу преобразования 3x3. Планета использует свое преобразование, корабль использует свое преобразование и преобразование планеты, а дрон использует свое преобразование и преобразование корабля и преобразование планеты.
Когда планета движется, вы меняете ее трансформацию, и корабль и дрон автоматически позиционируются «бесплатно». Гораздо чище код.
Все еще не убежден.
Векторы также являются родным представлением для положения, геометрии и движения, используемым почти во всех графических библиотеках - и, конечно, OpenGL и DirectX. Вы вряд ли уйдете без использования их.
Заключение
Векторы - это мощный инструмент для написания понятного кода, который решает геометрические проблемы чисто и элегантно.