воскресенье, 20 марта 2011 г.

Введение в векторы

Данной статьей я хочу начать небольшой цикл по возможному использованию векторов, а также освежить Ваши знания по данному предмету. Под вектором здесь я понимаю не «векторную графику», а Вектор – в смысле НАПРАВЛЕННЫЙ ОТРЕЗОК (надеюсь, что Вы сами поймете, почему я написал «Вектор» с большой буквы). В основном мы будем рассматривать векторы на плоскости, но будут и небольшие дополнения по предмету о векторах в пространстве.
Для чего же нужны векторы вообще? Отвечаем: с помощью векторов очень удобно задавать положение тел на плоскости и в пространстве, их скорости и ускорения (т.к. они, по сути, являются векторными величинами), всевозможные силовые факторы (гравитация, силы упругости, трения и т.д.). Иными словами, с их помощью можно создавать различные механические модели. Но на этом применение векторов не ограничивается, они используются и в трехмерной графике (например, для модели освещенности поверхностей, расположенных под различными углами к источнику света).
Заинтересованы? Как же столь простая вещь, как простой отрезок, может дать нам такие возможности? Что ж, давайте начнем путешествие в мир Вектора!
Рис.1. Вектор на плоскости

Математически вектор на плоскости может быть выражен парой чисел, причем несколькими способами:
1) полярный способ задания следует из определения вектора: первое число – его длина (т.е. расстояние между концом и началом вектора), второе – угол, который он образует с некоторой осью отсчета (на рис.1 такой осью является ось Ох). Данный способ мы будем использовать крайне редко (если вообще будем);
2) более распространенным является координатный способ задания вектора:
Взаимосвязи между длиной вектора, его углом на плоскости и координатами могут быть выражены следующими зависимостями:
Как видно, зная любые две характеристика вектора, мы можем найти остальные.
Теперь рассмотрим основные операции с векторами:
1) Умножение вектора на число

Рис.2. Умножение вектора на число (k>1)
Результатом умножения вектора AB на число k (масштабирование вектора) является вектор АС с координатами:

Таким образом:
- умножение вектора на k =1  оставит вектор без изменений;
- умножение вектора на k =0 превратит его в точку;
- умножение вектора на k =(-1) изменит его направление на противоположное;
- умножение вектора на |k| >1 увеличит его длину;
- умножение вектора на |k| <1 уменьшит его длину.

2) Нормализация вектора (приведение к единичному виду)
Часто бывает необходимо найти вектор, который был бы сонаправлен с исходным, но имел бы единичную длину (данные случаи мы рассмотрим в следующих статьях). Координаты такого вектора найти крайне просто, воспользовавшись операцией масштабирования вектора (пункт 1). Например, для вектора AB координаты единичного вектора найдем как:
где len – первоначальная длина вектора

3) Сложение векторов
Рис.3. Сложение векторов

Результатом сложения двух векторов, как можно догадаться, является третий вектор, соединяющий начало первого с концом второго.
Координаты результирующего вектора находятся по следующим зависимостям (см. рис. 3):

4) Разностью векторов a и b является третий вектор c с координатами:
Т.е.
5) Поворот вектора на некоторый угол α
Рис.4. Поворот вектора АВ на угол α

Используя несложные тригонометрические зависимости, получим новые координаты вектора:

где len – первоначальная длина вектора АВ (ее мы должны найти перед выполнением операции поворота).


6) Скалярным произведением двух векторов a и b является скаляр (число), равный:
где |a| и |b| – длины векторов; α – угол между ними.
Чаще всего скалярное произведение векторов используют для определения угла между ними и для проецирования одного вектора на второй (данный вопрос будет рассмотрен подробно далее).
Формула для определения угла между векторами:

Скалярное произведение перпендикулярных векторов равно нулю (с помощью данного свойства скалярного произведения можно определять взаимную перпендикулярность двух векторов):
У скалярного произведения есть физический смысл – оно равно работе силы a на перемещении b.

7) Векторное произведение двух векторов a и b есть третий вектор, перпендикулярный плоскости этих двух векторов. Длина данного вектора равна:
Как видно из этой формулы, если векторы a и b параллельны, то длина их векторного произведения равна нулю (т.к. sin(0)=sin(180)=0). Поэтому для случая вектора на плоскости данное произведение чаще всего используют для проверки параллельности векторов. В случае вектора в пространстве, векторным произведением пользуются для нахождения нормали к поверхности, образованной данными векторами, а сама нормаль поверхности может использоваться для определения видимости поверхности, степени ее освещенности (случай вектора в пространстве сейчас мы не будем рассматривать).Геометрический смысл векторного произведения – его длина равна площади параллелограмма, построенного на этих векторах.
В физике векторное произведение используется для нахождения момента силы относительно точки.

8) Помимо описанных операций, просто необходимо уметь находить нормали вектора.
Рис. 5. Вектор и его нормали: ln - левая нормаль, rn - правая нормаль

Нормаль – это вектор, перпендикулярный данному и имеющий ту же длину.
Как видно из рис. 5 у вектора есть 2 нормали (правая и левая). Координаты вектора и его нормалей связаны следующими зависимостями:
9) Проецирование вектора
Рис. 6. Проецирование вектора

Для нахождения координат вектора v3, являющегося проекцией вектора v1 на вектор v2, воспользуемся свойствами скалярного произведения.
Как видно из рис. 6, длина вектора v3 равна:
А так как скалярное произведение векторов v1 и v2, равно:
, то

Теперь нужно найти составляющие вектора v3 по координатным осям. Очевидно, что единичный вектор v3 будет совпадать с единичным вектором v2 (т.к. они направлены вдоль одной линии), поэтому чтобы найти координаты вектора v3, нужно умножить его нормализованный вектор v2 на длину вектора v3:
Для чего же нам могут понадобится проекции (и такие вычисления)?
Например, они нужны нам для расчетов столкновений, которые мы рассмотрим в следующих статьях.

10) Cкалярное произведение с перпендикулярным вектором.
Cкалярным перпендикулярным произведением (perproduct) векторов a и b является скалярное произведение левой нормали вектора a на вектор b. Данное произведение используется для нахождения точек пересечения векторов (подробно мы его рассмотрим в одной из следующих статей).

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

Использованная литература
1.    http://ru.wikipedia.org/wiki/Вектор_(математика)
2.    Базовые алгоритмы определения столкновений
3.    Rex van der Spuy. AdvancED Game Design with Flash.
4.    Vectors for Flash

2 комментария: