Самоучитель по 3dsmax 7

         

Поворот 3D вектора за шесть умножений


Поворот 3D вектора за шесть умножений РАЗНОЕ
7.3. Поворот 3D вектора за шесть умножений

Обычно поворот 3D вектора делают умножением матрицы поворота на этот вектор. Эта операция требует 9 умножений и 6 сложений. Но с использованием небольшого precalculation (предварительного расчета) ее можно несколько ускорить.

Пусть нам надо умножить какую-то строку матрицы (a,b,c) на вектор (x,y,z). Результат должен быть равен

r = a*x+b*y+c*z.

То есть как раз по 3 умножения и 2 сложения на одну строку. Но с другой стороны,

r = a*x+b*y+c*z = (a*x+b*y+a*b+x*y)+c*z-a*b-x*y = (a+y)*(b+x)+c*z-a*b-x*y.

Проще эта формула явно не выглядит. Но дело в том, что x*y - это постоянная величина, так как x, y - это координаты вершины неповернутого объекта, а они обычно не меняются. А a*b достаточно посчитать при расчете матрицы поворота, и это тоже постоянная величина для каждой матрицы. Т.о.

r = (a+y)*(b+x)+c*z-c1-c2.

В результате имеем 2 умножения и 4 сложения на одну строку, то есть те самые 6 умножений и 12 сложений на вектор. Выиграли 3 умножения ценой 6 сложений.



Содержание раздела