Вот простое доказательство того, что требуется обратная транспонирование. Предположим, у нас есть плоскость, определяемая уравнением плоскости , где n - нормаль. Теперь я хочу , чтобы преобразовать эту плоскость некоторой матрицы М . Другими словами, я хочу найти новое плоское уравнение n ′ ⋅ M x + d ′ = 0 , которое удовлетворяется для точно таких же значений x, которые удовлетворяют предыдущему плоскому уравнению.n ⋅ x + d= 0NMN'⋅ Мх + д'= 0Икс
Для этого достаточно установить равные уравнения в двух плоскостях. (Это исключает возможность произвольного изменения масштаба плоских уравнений, но это не важно для аргумента.) Тогда мы можем установить и вычесть его. То, что мы оставили, это:d'= д
n′⋅Mx=n⋅x
Я перепишу это с точечными произведениями, выраженными в матричной записи (думая о векторах как матрицы из 1 столбца):
n′TMx=nTx
Теперь, чтобы удовлетворить это для всех , мы должны иметь:x
n′TM=nT
Теперь решение для с точки зрения п ,n′n
n′Tn′n′=nTM−1=(nTM−1)T=(M−1)Tn
Presto! Если точки преобразованы матрицей M , то плоские нормали должны преобразоваться путем обратной транспонирования M , чтобы сохранить плоское уравнение.xMM
Это в основном свойство точечного произведения. Для того чтобы скалярное произведение оставалось инвариантным при применении преобразования, два вектора, которые должны быть расставлены точками, должны преобразовываться соответствующим, но различным образом.
Математически это можно описать, сказав, что нормальный вектор - это не обычный вектор, а то, что называется ковектором (он же ковариантный вектор, двойной вектор или линейная форма). Ковектор в основном определяется как «вещь, которая может быть усеяна вектором для получения инвариантного скаляра». Чтобы достичь этого, он должен трансформироваться с использованием обратной транспонирования любой матрицы, работающей с обычными векторами. Это верно в любом количестве измерений.
Обратите внимание, что в 3D, в частности, бивектор похож на ковектор. Они не совсем одинаковые, поскольку у них разные единицы измерения: у ковектора есть единицы обратной длины, а у бивектора - единицы длины в квадрате (площадь), поэтому они ведут себя по-разному при масштабировании. Тем не менее, они трансформируются одинаково в отношении своей ориентации, что имеет значение для нормалей. Мы обычно не заботимся о величине нормали (мы всегда нормализуем их к единичной длине в любом случае), поэтому нам обычно не нужно беспокоиться о разнице между бивектором и ковектором.