Перейти на главную   
  helloworld.ru - документация и книги по программированию  
helloworld.ru - документация и книги по программированию
    главная     хостинг    
Поиск по сайту:  
Смотрите также
Языки программирования
C#
MS Visual C++
Borland C++
C++ Builder
Visual Basic
Quick Basic
Turbo Pascal
Delphi
JavaScript
Java
PHP
Perl
Assembler
AutoLisp
Fortran
Python
1C

Интернет-технологии
HTML
VRML
HTTP
CGI
FTP
Proxy
DNS
протоколы TCP/IP
Apache

Web-дизайн
HTML
Дизайн
VRML
PhotoShop
Cookie
CGI
SSI
CSS
ASP
PHP
Perl

Программирование игр
DirectDraw
DirectSound
Direct3D
OpenGL
3D-графика
Графика под DOS

Алгоритмы
Численные методы
Обработка данных

Сис. программирование
Драйверы

Базы данных
MySQL
SQL

Другое

Хостинг


Друзья
demaker.ru
Реклама

Лучший хостинг. Аренда серверов




helloworld.ru





 в самое начало


demo.design
3D programming FAQ



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



 в самое начало


demo.design
3D programming FAQ














helloworld.ru © 2001-2021
Все права защищены