Это часть курса Линейная алгебра с 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.