← Назад к вопросам

Что такое Cross Product?

2.3 Middle🔥 141 комментариев
#Физика и математика

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI7 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое Cross Product (Векторное произведение)?

Векторное произведение (Cross Product) — это бинарная операция над двумя векторами в трехмерном пространстве, результатом которой является новый вектор, перпендикулярный плоскости, содержащей исходные вектора. Это фундаментальная операция в линейной алгебре и компьютерной графике, крайне важная для разработки в Unity.

Ключевые математические свойства

  • Результат — вектор: В отличие от скалярного произведения (Dot Product), результатом является вектор.
  • Перпендикулярность: Результирующий вектор ортогонален (перпендикулярен) обоим исходным векторам.
  • Модуль (длина): Длина результирующего вектора равна площади параллелограмма, построенного на исходных векторах. Вычисляется как |a| * |b| * sin(θ), где θ — угол между векторами.
  • Направление: Определяется правилом правой руки. Если направить пальцы по направлению первого вектора, а затем согнуть их ко второму вектору, то отогнутый большой палец укажет направление векторного произведения.
  • Антикоммутативность: a × b = -(b × a). Порядок векторов имеет значение и меняет направление результата на противоположное.

Запись и вычисление в Unity (C#)

В Unity для работы с векторным произведением используется статический метод Vector3.Cross().

Vector3 a = new Vector3(1, 0, 0); // Вектор, направленный вдоль оси X
Vector3 b = new Vector3(0, 1, 0); // Вектор, направленный вдоль оси Y

// Вычисление векторного произведения
Vector3 crossResult = Vector3.Cross(a, b); // Результат будет (0, 0, 1) - вектор вдоль оси Z

Debug.Log(crossResult); // Выведет: (0.0, 0.0, 1.0)

Практическое применение в разработке игр на Unity

Векторное произведение — это рабочий инструмент для решения множества задач:

  1. Вычисление нормали к поверхности: Для определения направления, в котором "смотрит" грань или плоскость. Это основа для освещения, столкновений и симуляций.

    Vector3 vertex1 = mesh.vertices[0];
    Vector3 vertex2 = mesh.vertices[1];
    Vector3 vertex3 = mesh.vertices[2];
    
    Vector3 edge1 = vertex2 - vertex1;
    Vector3 edge2 = vertex3 - vertex1;
    Vector3 faceNormal = Vector3.Cross(edge1, edge2).normalized;
    
  2. Определение "лево" / "право": Часто используется в ИИ для навигации. Сравнивая направление от объекта к цели и текущее направление взгляда объекта, можно понять, куда нужно повернуть.

    Vector3 toTarget = (target.position - transform.position).normalized;
    float turnDirection = Vector3.Dot(Vector3.Cross(transform.forward, toTarget), Vector3.up);
    // Если turnDirection > 0 - цель справа, если < 0 - слева.
    
  3. Создание ортонормированного базиса (камеры, системы координат): Зная направление "вперед", можно вычислить "вправо" и "вверх" для камеры или локальной системы координат объекта.

    Vector3 forward = transform.forward;
    Vector3 worldUp = Vector3.up;
    Vector3 right = Vector3.Cross(worldUp, forward).normalized;
    Vector3 correctedUp = Vector3.Cross(forward, right);
    
  4. Расчет вращательного момента (Torque) в физике: В движке PhysX (а через Rigidbody.AddTorque — и в Unity) момент силы вычисляется как векторное произведение радиус-вектора на вектор силы (τ = r × F).

  5. Вращение векторов на 90 градусов в плоскости: Например, чтобы получить перпендикулярное 2D-направление, можно работать с векторами как с 3D, где Z=0.

Важные замечания для разработчика

  • Нормализация: Часто после операции Cross требуется вызвать .normalized, чтобы получить вектор единичной длины, если важно только направление.
  • Коллинеарность: Если исходные вектора параллельны (или один из них нулевой), их векторное произведение будет нулевым вектором (0,0,0), так как площадь параллелограмма станет нулевой.
  • Оптимизация: Операция относительно легковесна, но в горячих циклах (например, Update() для сотен объектов) стоит следить за производительностью.

Итог: Векторное произведение — это не абстрактная математика, а ежедневный инструмент в арсенале Unity-разработчика. Понимание его работы необходимо для реализации корректной графики, физики, игровой логики и искусственного интеллекта, делая ваши игры технически грамотными и визуально точными.