На данный момент появилось достаточно большое количество библиотек дополненной реальности с богатым функционалом (ARCore, ARKit, Vuforia).
Однако я решил начать свое открытый проект , попутно описывая, как это работает изнутри.
Если вам повезет, то позже вы сможете добавить какой-то особенный интересный функционал, которого нет в других библиотеках.
Давайте пока возьмем Windows и Android в качестве целевых платформ.
Библиотека написана на C++, и сторонние библиотеки будут использоваться по минимуму, т.е.
в основном ничего готового использоваться не будет. В центре внимания статей будут алгоритмы и математика, которые я постараюсь описать максимально доступно и подробно.
В этой статье пойдет речь об основах векторной алгебры.
Дополненная реальность — это сочетание виртуального мира и реального.
Для этого нам необходимо представить окружающее реальное пространство в виде математической модели, понимая законы которой, мы сможем получить данные для комбинирования.
Начнем с основ векторной алгебры.
Векторы — это частный случай матриц, состоящих либо из одного столбца, либо из одной строки.
Когда мы говорим о векторе, обычно имеется вектор-столбец.
.
Но записывать вектор в виде столбца неудобно, поэтому будем его транспонировать —
.
Длина вектора
Первое, на что мы посмотрим, — это получение длины вектора —, Где
- значение длины,
наш вектор.
Например, возьмем двумерный вектор:
, Где
И
— компоненты вектора, значения проекций вектора на двумерные оси координат. И мы видим прямоугольный треугольник, где
И
длины ног и
- длина его гипотенузы.
По теореме Пифагора получается, что
.
Означает
.
Вид формулы сохраняется для векторов большей размерности, например –
.
Скалярное произведение
Скалярное произведение векторов представляет собой сумму произведения их компонентов:.
Но поскольку мы знаем, что векторы — это матрицы, то удобнее записать это в таком виде:
.
Эту же работу можно записать и в другой форме:
, Где
— угол между векторами
И
(для двумерного случая эта формула доказывается теоремой косинусов).
Используя эту формулу, можно сделать вывод, что скалярное произведение является мерой сонаправленности векторов.
Ведь если
, Что
, И
это просто произведение длин векторов.
Потому что
- не может быть больше 1, то это максимальное значение, которое мы можем получить, меняя только угол
.
Минимальное значение
будет равен -1 и получается при
, то есть когда векторы направлены в противоположные стороны.
Также отметим, что когда
, что означает, какую бы длину ни имел вектор
И
, не имеет значения
.
В этом случае можно сказать, что векторы не имеют общего направления и называются ортогональными.
Также, используя скалярное произведение, мы можем более красиво записать формулу длины вектора:
,
.
Проекция вектора на другой вектор
Возьмем два вектора:И
.
Проекцию вектора на другой вектор можно рассматривать в двух смыслах: геометрическом и алгебраическом.
В геометрическом смысле проекция вектора на ось — это вектор, а в алгебраическом — число.
Векторы — это направления, поэтому их начало лежит в начале координат. Выделим ключевые моменты:
- источник,
— конечная точка вектора
,
— конечная точка вектора
.
В геометрическом смысле мы ищем такую
, так что конечная точка вектора (обозначим ее как -
) была ближайшей точкой к точке
, лежащий на прямой
.
Другими словами, мы хотим найти компонент
В
, то есть это значение
, к
И
Расстояние между точками
И
будет минимальным, если
.
Получаем прямоугольный треугольник –
.
Обозначим
.
Мы знаем это
по определению косинуса через соотношение сторон прямоугольного треугольника
(
- гипотенуза,
- соседняя нога).
Мы также берем скалярное произведение
.
Следует, что
.
Что значит
.
Вот мы это помним
искомый вектор
, А
—
, и мы получаем
.
Умножьте обе части на
и мы получаем -
.
Теперь мы знаем длину
.
Вектор
отличается от вектора
длину, а не направление, то есть через соотношение длин можно получить:
.
И мы можем вывести окончательные формулы:
И
Нормализованный вектор
Хороший способ упростить работу с векторами — использовать векторы единичной длины.
Возьмем вектор
и мы получаем сонаправленный вектор
длина единицы.
Для этого разделим вектор на его длину:
.
Эта операция называется нормализацией, а вектор – нормализованным.
Зная нормализованный вектор и длину исходного вектора, можно получить исходный вектор:
.
Зная нормализованный вектор и исходный вектор, можно получить его длину:
.
Хорошим преимуществом нормализованных векторов является то, что формула проекции значительно упрощается (поскольку длина равна 1, она уменьшается).
Векторная проекция
на
длина единицы:
Матрица вращения двумерного пространства
Предположим, у нас есть некая цифра:Для его рисования задаются координаты его вершин, от которых проводятся линии.
Координаты задаются как набор векторов следующим образом:
.
Наша координатная сетка определяется двумя осями — единичными ортогональными (перпендикулярными) векторами.
В двумерном пространстве можно получить два вектора, перпендикулярных другому вектору той же длины, следующим образом:
- левый и правый перпендикуляры.
Берем вектор, определяющий ось
—
и ось
- слева перпендикулярно ему -
.
Давайте выведем новый вектор, полученный из наших базисных векторов:
Сюрприз — он соответствует нашему исходному вектору.
Теперь попробуем как-то изменить нашу фигуру – повернем ее на угол.
.
Для этого повернем векторы
И
, определяющий оси координат. Поворот вектора
задается косинусом и синусом угла -
.
И чтобы получить вектор оси
, возьмем перпендикуляр к
:
.
Завершив это преобразование, мы получим новую фигуру:
Как мы видим, порядок выполнения операций имеет большое значение и его необходимо учитывать.
Также здесь мы также можем объединить матрицы преобразования в одну:
Хотя в этом случае, если
Теги: #математика #Алгоритмы #Разработки для AR и VR #AR и VR #AR #векторная математика #векторная алгебра
-
Пешковский Александр Матвеевич.
19 Oct, 24 -
Arangodb В Реальном Проекте
19 Oct, 24 -
Легальный Dvd Против Пиратской Копии
19 Oct, 24 -
И Exalead Тоже Ищет
19 Oct, 24