|  | 
|      | 
|   | 
| Основы 3D математики - Векторные и матричные преобразованияDelphi , Синтаксис , МатематикаОсновы 3D математики - Векторные и матричные преобразованияВекторы Вектор - направленный отрезок, имеющий направление и длину. Векторы обозначаются так: a = (x,y,z), например, b = (0,1,-2). Еще одно представление вектора : AB = (x,y,z). 
 где A и B - 2 точки, A(ax,ay,az) и B(bx,by,bz), A - начало вектора, B - конец вектора. Длина вектора Длина вектора, |a|, считается так: 
 Сложение векторов. 
 т. е. как результат мы получаем вектор. Вычитание векторов. 
 как результат - также мы получаем вектор. Cкалярное произведение векторов.(dot) Скалярное произведение 2х векторов - произведение длин 2х векторов на cos угла между ними. Скалярное произведение векторов - это длина проекции вектора a на вектор b. 
 или 
 Следствие: ? - угол между двумя векторами: cos ? = a . b / (|a| |b|); Проекция одного вектора на другой. Для того, чтобы вычислить проекцию вектора b на вектор а требуется просто произвести скалярное умножение этих векторов, а затем получить произведение получившегося результата на вектор b. Обозначим искомый вектор как c. тогда: 
 фактически, мы находим длину проекции и, умножая ее на вектор, проекцию которого мы нашли, маштабируем его до нужного размера. Умножение вектора на вектор.(cross) Умножая вектор a на вектор b, мы получим вектор, перпендикулярный плоскости, которую определяют вектора a и b. 
 фактически, таким образом находиться вектор нормали к полигонам. Матрицы Здесь я постарался вкратце изложить то, что мы будем делать с матрицами. скалярное произведение векторов: 
 Векторное произведение: 
 Сложение матриц: 
 Умножение матриц: 
 Очень важным является тот факт, что (A*B)*С = A*(B*C) Векторные и матричные преобразования Параллельный перенос: Переносим точку (x,y,z) на вектор (dx,dy,dz), в результате получим точку с координатами (x+dx, y+dy, z+dz); Поворот: Поворачиваем точку (x,y) на угол ? : 
 для трехмерного случая - аналогично для каждой плоскости. ясно, что если нам потребуется (а нам потребуется :) ) проводить для каждой точки в пространстве параллельный перенос + поворот в пространстве, то придеться сделать огромное количество преобразований. можно построить матрицы преобразований, помножив точку - вектор на которую, мы получим результат - координаты искомой точки. матрица параллельного переноса: 
 матрица растяжения/сжатия: 
 матрица поворота вокруг оси x: 
 матрица поворота вокруг оси y: 
 матрица поворота вокруг оси z: 
 теперь - зачем нужны матрицы в 3D-програмировании, если можно все сделать с помощью векторов, и если, например, поворот точки с помощью векторов занимает меньше операций, чем используя матрицы. например, мы отодвигаем камеру и поворачиваем ее. для этого требуется произвести серию операций (переносов, поворотов) с точками (вершинами полигонов) в 3D-сцене. т.е. для каждой точки произвести сначала параллельный перенос, а затем - повороты по всем осям. при использовании векторов мы просто проведем все эти операции отдельно для каждой точки... что весьма ресурсоемко. или - матричные параллельные переносы, повороты.... еще более ресурсоемко, но вспомним: 
 для матриц.. а нам требуется провести такие преобразования: a*A*B*C*D, где - а-точка-вектор, над которым требуется произвести действия, а A,B,C,D - матрицы переноса и поворотов. Мы вполне можем не последовательно умножать точку-вектор a на матрицы переносов, а сначала перемножить эти матрицы, а затем просто умножать получившуюся матрицу на каждую точку, которую требуется сместить - перемножение 4х матриц, а затем умножение 1 вектора на 1 матрицу на каждую точку по сравнению с подвержением каждой точки векторным преобразованиям - весьма и весьма значительное сокращение производимых операций. Основы 3D математики - Векторные и матричные преобразования: статья описывает основные понятия математических операций с векторами, включая скалярное произведение, векторное произведение, сложение и вычитание векторов, а также работу с матрицами, включая Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш  :: Главная :: Математика :: 
 | |||||||||||||||||||||||
|  ©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 | |||||||||||||||||||||||