![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Основы 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 |