Модуль вектора и нормализация
Что такое модуль вектора? 🎯
Представь, что ты запускаешь ракету в игре. Ты знаешь её направление (север, юго-запад), но не менее важно знать, какова её сила или скорость. Вот именно эту «силу» вектора в математике и называют его модулем или длиной.
Модуль вектора — это всегда неотрицательное число, которое показывает, «сколько» в этом векторе. Обозначается он так: |a| (вектор заключается в вертикальные чёрточки, как модуль числа).
Как вычислить модуль? 📏
Формула расчёта модуля напрямую связана с теоремой Пифагора, которую ты наверняка помнишь. Всё очень логично!
В 2D-пространстве
Если у нас есть вектор с координатами (x, y), то его модуль вычисляется по формуле:
|a| = √(x² + y²)
Мы просто находим гипотенузу прямоугольного треугольника с катетами x и y.
🧠 Пример: Дан вектор
a = (3, 4). Найдём его модуль.|a| = √(3² + 4²) = √(9 + 16) = √25 = 5Его длина равна 5. Это классический «египетский» треугольник!
В 3D-пространстве
Для 3D-вектора с координатами (x, y, z) формула лишь немного удлиняется. Мы находим диагональ прямоугольного параллелепипеда:
|a| = √(x² + y² + z²)
🧠 Пример: Дан вектор
b = (1, 2, 2).|b| = √(1² + 2² + 2²) = √(1 + 4 + 4) = √9 = 3Его длина равна 3.
Эта же логика работает и для пространств с большей размерностью!
Зачем нужна нормализация? ✨
А теперь представь, что твоя ракета летит с силой в 5 единиц. А тебе нужно, чтобы она летела в том же направлении, но с силой 1 (например, для расчёта освещения или направления взгляда камеры).
Вот этот процесс приведения вектора к длине 1 без изменения его направления и называется нормализацией. Полученный вектор называется единичным вектором или ортом.
Единичные векторы — это фундаментальные «строительные блоки» в геймдеве. Они идеально подходят для описания чистых направлений.
💡 Совет: Почему длина 1 так удобна? Потому что это нейтральный элемент умножения. Умножив нормализованный вектор на нужное число (например, на скорость
10), мы мгновенно получим вектор длиной ровно10в том же направлении!
Формула нормализации 🧮
Чтобы нормализовать любой ненулевой вектор, нужно каждую его координату разделить на его длину (модуль).
a_norm = (x / |a|, y / |a|, z / |a|)
Давай нормализуем наш вектор a = (3, 4) из предыдущего примера. Мы уже вычислили, что его модуль |a| = 5.
a_norm = (3 / 5, 4 / 5) = (0.6, 0.8)
Теперь проверим длину получившегося вектора:
|a_norm| = √(0.6² + 0.8²) = √(0.36 + 0.64) = √1 = 1
🎉 Отлично! Мы получили единичный вектор.
⚠️ Важно: Нельзя нормализовать нулевой вектор (с координатами
(0, 0, 0)). Его длина равна нулю, а деление на ноль приведёт к ошибке в коде. Всегда проверяй, что длина вектора больше нуля, прежде чем его нормализовать!
Практика: решаем задачи 🧩
Задача 1: Найти модуль
Дан вектор скорости снаряда: v = (-5, 12). Какова его скорость (длина)?
Пошаговое решение:
- Запишем формулу для модуля 2D-вектора:
|v| = √(x² + y²). - Подставим наши координаты:
|v| = √((-5)² + 12²). - Возведём координаты в квадрат:
(-5)² = 25,12² = 144. - Сложим результаты:
25 + 144 = 169. - Извлечём квадратный корень:
√169 = 13.
Ответ: Скорость снаряда равна 13 единиц.
Задача 2: Нормализовать вектор
Персонаж смотрит в направлении, заданном вектором dir = (6, 0, 8). Найдите единичный вектор (орт) этого направления.
Пошаговое решение:
- Сначала найдём модуль вектора
|dir|.|dir| = √(6² + 0² + 8²) = √(36 + 0 + 64) = √100 = 10
- Теперь нормализуем, разделив каждую координату на длину:
dir_norm = (6/10, 0/10, 8/10) = (0.6, 0.0, 0.8)
- Проверим длину нового вектора для уверенности:
|dir_norm| = √(0.6² + 0.0² + 0.8²) = √(0.36 + 0 + 0.64) = √1 = 1
Ответ: Единичный вектор направления взгляда равен (0.6, 0.0, 0.8).
Где это применяется в геймдеве? 🎮
- Расчёт освещения: В шейдерах почти всегда используются нормализованные векторы нормали поверхности и направления к свету.
- Движение и физика: Чтобы задать объекту движение в определённом направлении с определённой скоростью, мы часто умножаем нормализованный вектор направления на скаляр скорости.