Данной статьей я хочу начать небольшой цикл по возможному использованию векторов, а также освежить Ваши знания по данному предмету. Под вектором здесь я понимаю не «векторную графику», а Вектор – в смысле НАПРАВЛЕННЫЙ ОТРЕЗОК (надеюсь, что Вы сами поймете, почему я написал «Вектор» с большой буквы). В основном мы будем рассматривать векторы на плоскости, но будут и небольшие дополнения по предмету о векторах в пространстве.
Для чего же нужны векторы вообще? Отвечаем: с помощью векторов очень удобно задавать положение тел на плоскости и в пространстве, их скорости и ускорения (т.к. они, по сути, являются векторными величинами), всевозможные силовые факторы (гравитация, силы упругости, трения и т.д.). Иными словами, с их помощью можно создавать различные механические модели. Но на этом применение векторов не ограничивается, они используются и в трехмерной графике (например, для модели освещенности поверхностей, расположенных под различными углами к источнику света).
Заинтересованы? Как же столь простая вещь, как простой отрезок, может дать нам такие возможности? Что ж, давайте начнем путешествие в мир Вектора!
Математически вектор на плоскости может быть выражен парой чисел, причем несколькими способами:
1) полярный способ задания следует из определения вектора: первое число – его длина (т.е. расстояние между концом и началом вектора), второе – угол, который он образует с некоторой осью отсчета (на рис.1 такой осью является ось Ох). Данный способ мы будем использовать крайне редко (если вообще будем);
2) более распространенным является координатный способ задания вектора:
Взаимосвязи между длиной вектора, его углом на плоскости и координатами могут быть выражены следующими зависимостями:
Как видно, зная любые две характеристика вектора, мы можем найти остальные.
Теперь рассмотрим основные операции с векторами:
1) Умножение вектора на число
Результатом умножения вектора AB на число k (масштабирование вектора) является вектор АС с координатами:
Таким образом:
- умножение вектора на k =1 оставит вектор без изменений;
- умножение вектора на k =0 превратит его в точку;
- умножение вектора на k =(-1) изменит его направление на противоположное;
- умножение вектора на |k| >1 увеличит его длину;
- умножение вектора на |k| <1 уменьшит его длину.
2) Нормализация вектора (приведение к единичному виду)
Часто бывает необходимо найти вектор, который был бы сонаправлен с исходным, но имел бы единичную длину (данные случаи мы рассмотрим в следующих статьях). Координаты такого вектора найти крайне просто, воспользовавшись операцией масштабирования вектора (пункт 1). Например, для вектора AB координаты единичного вектора найдем как:
где len – первоначальная длина вектора
3) Сложение векторов
Результатом сложения двух векторов, как можно догадаться, является третий вектор, соединяющий начало первого с концом второго.
Координаты результирующего вектора находятся по следующим зависимостям (см. рис. 3):
4) Разностью векторов a и b является третий вектор c с координатами:
Т.е.
Для чего же нужны векторы вообще? Отвечаем: с помощью векторов очень удобно задавать положение тел на плоскости и в пространстве, их скорости и ускорения (т.к. они, по сути, являются векторными величинами), всевозможные силовые факторы (гравитация, силы упругости, трения и т.д.). Иными словами, с их помощью можно создавать различные механические модели. Но на этом применение векторов не ограничивается, они используются и в трехмерной графике (например, для модели освещенности поверхностей, расположенных под различными углами к источнику света).
Заинтересованы? Как же столь простая вещь, как простой отрезок, может дать нам такие возможности? Что ж, давайте начнем путешествие в мир Вектора!
Рис.1. Вектор на плоскости |
Математически вектор на плоскости может быть выражен парой чисел, причем несколькими способами:
1) полярный способ задания следует из определения вектора: первое число – его длина (т.е. расстояние между концом и началом вектора), второе – угол, который он образует с некоторой осью отсчета (на рис.1 такой осью является ось Ох). Данный способ мы будем использовать крайне редко (если вообще будем);
2) более распространенным является координатный способ задания вектора:
Взаимосвязи между длиной вектора, его углом на плоскости и координатами могут быть выражены следующими зависимостями:
Как видно, зная любые две характеристика вектора, мы можем найти остальные.
Теперь рассмотрим основные операции с векторами:
1) Умножение вектора на число
Рис.2. Умножение вектора на число (k>1) |
Таким образом:
- умножение вектора на k =1 оставит вектор без изменений;
- умножение вектора на k =0 превратит его в точку;
- умножение вектора на k =(-1) изменит его направление на противоположное;
- умножение вектора на |k| >1 увеличит его длину;
- умножение вектора на |k| <1 уменьшит его длину.
2) Нормализация вектора (приведение к единичному виду)
Часто бывает необходимо найти вектор, который был бы сонаправлен с исходным, но имел бы единичную длину (данные случаи мы рассмотрим в следующих статьях). Координаты такого вектора найти крайне просто, воспользовавшись операцией масштабирования вектора (пункт 1). Например, для вектора AB координаты единичного вектора найдем как:
где len – первоначальная длина вектора
3) Сложение векторов
Рис.3. Сложение векторов |
Результатом сложения двух векторов, как можно догадаться, является третий вектор, соединяющий начало первого с концом второго.
Координаты результирующего вектора находятся по следующим зависимостям (см. рис. 3):
4) Разностью векторов a и b является третий вектор c с координатами:
Т.е.
5) Поворот вектора на некоторый угол α
Используя несложные тригонометрические зависимости, получим новые координаты вектора:
где len – первоначальная длина вектора АВ (ее мы должны найти перед выполнением операции поворота).
6) Скалярным произведением двух векторов a и b является скаляр (число), равный:
где |a| и |b| – длины векторов; α – угол между ними.
Чаще всего скалярное произведение векторов используют для определения угла между ними и для проецирования одного вектора на второй (данный вопрос будет рассмотрен подробно далее).
Формула для определения угла между векторами:
Скалярное произведение перпендикулярных векторов равно нулю (с помощью данного свойства скалярного произведения можно определять взаимную перпендикулярность двух векторов):
У скалярного произведения есть физический смысл – оно равно работе силы a на перемещении b.
7) Векторное произведение двух векторов a и b есть третий вектор, перпендикулярный плоскости этих двух векторов. Длина данного вектора равна:
Как видно из этой формулы, если векторы a и b параллельны, то длина их векторного произведения равна нулю (т.к. sin(0)=sin(180)=0). Поэтому для случая вектора на плоскости данное произведение чаще всего используют для проверки параллельности векторов. В случае вектора в пространстве, векторным произведением пользуются для нахождения нормали к поверхности, образованной данными векторами, а сама нормаль поверхности может использоваться для определения видимости поверхности, степени ее освещенности (случай вектора в пространстве сейчас мы не будем рассматривать).Геометрический смысл векторного произведения – его длина равна площади параллелограмма, построенного на этих векторах.
В физике векторное произведение используется для нахождения момента силы относительно точки.
8) Помимо описанных операций, просто необходимо уметь находить нормали вектора.
Нормаль – это вектор, перпендикулярный данному и имеющий ту же длину.
Как видно из рис. 5 у вектора есть 2 нормали (правая и левая). Координаты вектора и его нормалей связаны следующими зависимостями:
9) Проецирование вектора
Для нахождения координат вектора 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
Рис.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