Это часть курса Линейная алгебра с JavaScript.

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

Мы можем написать класс для вектора в 2D и назвать его Vector2D, а затем написать класс для 3D-пространства и назвать его Vector3D, но что, если мы столкнемся с проблемой, когда векторы представляют собой не направление в физическом пространстве. Например, нам может потребоваться представить цвет (RGBA) как вектор, который будет иметь четыре компонента - красный, зеленый, синий и альфа-канал. Или, скажем, у нас есть вектор, который дает доли пропорций из n вариантов, например вектор, который описывает вероятность того, что каждая из пяти лошадей выиграет скачку. Итак, мы создаем класс, не привязанный к размерам, и используем его так:

Векторные операции

Рассмотрим два вектора и предположим, что α ∈ R - произвольная константа. Для этих векторов определены следующие операции:

Визуализации всех этих операций, кроме кросс-продукта, вы можете найти здесь. В репозитории GitHub наряду с библиотекой живет проект React, в котором мы строим библиотеку для создания визуализаций. Если вам интересно узнать, как эти двухмерные визуализации создаются с помощью React и SVG, ознакомьтесь с этой историей.

Сложение и вычитание

Как и числа, вы можете складывать векторы и вычитать их. Выполнение арифметических вычислений над векторами просто требует выполнения арифметических операций над их компонентами.

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

Масштабирование

Мы также можем масштабировать вектор на любое число α ∈ R, где каждый компонент умножается на коэффициент масштабирования α. Если α ›1, вектор станет длиннее, а если 0 ≤ α‹ 1, то вектор станет короче. Если α - отрицательное число, масштабированный вектор будет указывать в противоположном направлении.

В методе scaleBy мы возвращаем новый вектор со всеми компонентами, умноженными на число, переданное в качестве параметра.

Длина

Длина вектора получается из теоремы Пифагора.

Метод длины очень прост, поскольку в Math уже есть нужная нам функция.

Скалярное произведение

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

В методе dotProduct мы получаем другой вектор в качестве параметра и с помощью метода reduce получаем сумму произведений соответствующих компонентов.

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

Если мы возьмем скалярное произведение двух нормализованных векторов и результат будет равен единице, это означает, что они имеют одинаковое направление. Чтобы сравнить два числа с плавающей запятой, мы будем использовать функцию areEqual.

Если мы возьмем скалярное произведение двух нормализованных векторов и результат будет равен минус единице, это означает, что они имеют прямо противоположное направление.

Если мы возьмем скалярное произведение двух нормализованных векторов и результат будет равен нулю, это означает, что они перпендикулярны.

Перекрестный продукт

Перекрестное произведение определяется только для трехмерных векторов и дает вектор, перпендикулярный обоим входным векторам.

В нашей реализации перекрестного произведения мы предполагаем, что этот метод используется только для векторов в трехмерном пространстве.

Другие полезные методы

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

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

Угол между

Отрицать

Чтобы вектор был направлен в отрицательную сторону, нам нужно масштабировать его на минус один.

Проект по

С длиной

Часто нам может потребоваться придать нашему вектору определенную длину.

Равно

Чтобы проверить, равны ли два вектора, мы будем использовать функцию areEqual для всех компонентов.

Единичный вектор и базис

Мы можем думать о векторе как о команде «пройти расстояние vx в направлении x, расстояние vy в направлении y и vz в z-направлении ». Чтобы написать этот набор команд более явно, мы можем использовать кратные векторам ̂i, ̂j, и ̂k. Это единичные векторы, указывающие в направлениях x, y и z соответственно:

Любое число, умноженное на ̂i, соответствует вектору с этим числом в первой координате. Например:

Одно из важнейших понятий в изучении векторов - понятие основы. Рассмотрим пространство трехмерных векторов ℝ³. Основой для ℝ³ является набор векторов {ê₁, ê₂, ê₃}, которые можно использовать в качестве системы координат для ℝ³. Если набор векторов {ê₁, ê₂, ê₃} является базисом, то мы можем представить любой вектор v⃗∈ℝ³ как коэффициенты (v₁, v₂, v₃) в отношении этой основы:

Вектор v⃗ получается путем измерения расстояния v₁ в направлении ê₁
, расстояния v₂ в направлении ê₂ и расстояние v₃ в направлении
ê₃.

Сама по себе тройка коэффициентов ничего не значит, если мы не знаем, какой базис используется. Требуется основа для преобразования математических объектов, таких как тройка (a, b, c), в реальные идеи, такие как цвета, вероятности или местоположения.

Следующая часть -›

Посетите мое приложение на Increaser.org, чтобы делать больше, работая умнее.

Достигните нового уровня сфокусированности и продуктивности с Increaser.org.