РАЗНОЕ
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 сложений.