Archive for » May, 2008 «

Friday, May 30th, 2008 | Author: admin

Вот пара примеров матриц, которые можно перемножать. Перемножение матриц размерами 2×3 и 3×7 даст в результате матрицу 2×7. Перемножение матриц размерами 2×3 и 3×5 даст в результате матрицу 2×5. Перемножить матрицы размерами 2×3 и 5×3 нельзя.
Сам метод перемножения на первый взгляд может показаться запутанным, но со временем вы привыкнете к нему. Перемножение матриц можно рассматривать по-разному. Я предложу пару подходов, и вы сможете решить, какой вам больше нравится.
Первый подход - воспринимать перемножение матриц как последовательности скалярных произведений векторов. Взгляните на строку первой матрицы. Она выглядит как набор компонентов вектора, правда? А теперь посмотрите на первый столбец второй матрицы. Он тоже выглядит как набор компонентов вектора. А теперь можно «перемножить» эти два вектора, чтобы получить скаляр. Этот скаляр будет значением на пересечении первого столбца и первой more…

Tags: 5x3, геометрии, рендеринг

Related posts

Friday, May 30th, 2008 | Author: admin

Чтобы умножить матрицу на скаляр, нужно просто умножить на этот скаляр каждый элемент матрицы.
Пусть у нас есть матрица А и скаляр w. Тогда, если оператор реализован как дружественная функция, выполняющая умножение, если левым операндом является скаляр. Эти операторы можно использовать так:
matrix2×2 ml, m2(l, 2, 3, 4); scalar s = 5; ml = m2 * s;
Или то же самое можно записать в виде
matrix2×2 ml, m2(l, 2, 3, 4); scalar s = 5; ml = s * m2;
И тот, и другой вариант будут работать. В классах также есть операторы *=, позволяющие умножить матрицу на скаляр и сохранить результат в той же матрице.
Деление матрицы на скаляр выполняется примерно так же, как умножение. Чтобы разделить матрицу на скаляр, нужно разделить на этот скаляр каждый элемент матрицы, как показано ниже: more…

Tags: 5x3, рендеринг, Умножение

Related posts

Sunday, May 25th, 2008 | Author: admin

Вычтя вектор рг из вектора р2 с рисунка 8.5, мы получим вектор расстояния между двумя центрами масс. Теперь программе осталось только найти длину вектора расстояния и сравнить ее с суммой радиусов ограничивающих сфер. Если эта длина меньше суммы радиусов, значит, произошло столкновение. Если нет, столкновения нет.
Рис. 8.5. Нахождение вектора расстояния между двумя объектами
Если описанные выше действия не совсем понятны, посмотрите на следующий фрагмент кода. Он использует два объекта класса d3d_po-int_mass — balll и ball2 - и вычисляет расстояние между ними как длину вектора расстояния. После этого он сравнивает найденное расстояние и сумму радиусов.
// Вычисляем разницу векторов местоположения сфер.
vector_3d distance = balll.Location() - ball2.location(); more…

Tags: 5x3, действия, Умножение

Related posts

Sunday, May 25th, 2008 | Author: admin

В этих классах, как и в ранних версиях классов векторов, есть только элементы данных и методы записи и чтения значений этих элементов. В нескольких последующих разделах мы добавим в них возможности выполнения различных операций над матрицами. Однако их код обычно весьма прост и в книге по большей части не приводится. На компакт-диске, поставляющемся с книгой, содержится полная версия библиотеки моделирования, в которой реализованы все методы, выполняющие операции над матрицами. Вы найдете эту библиотеку в папке Source\Chap-ter03\Vectors and Matrices, в файле PMMathLibVIO .h.Единичная матрица
Одна из простейших операций, которые можно выполнить над матрицей, - инициализация ее единичной матрицей. Единичная матрица (unit matrix) - это квадратная матрица, все элементы которой равны 0, кроме элементов, расположенных на диагонали, идущей от левого верхнего угла в правый нижний. Это описание легче понять, если рассмотреть пример ниже. Единичная матрица размера 2×2 выглядит следующим образом:
1= more…

Tags: PMMathLibVIO, действия, Умножение

Related posts

Tuesday, May 20th, 2008 | Author: admin

Матрицы - это просто массивы чисел, которые можно складывать и перемножать по определенным правилам. Вы, вероятно, знаете, что такое массивы в программировании, даже если вы не встречались с ними где-то еще. В физике и математике матрицы обозначаются заглавными буквами, например, М. Элементы матрицы обычно обозначаются строчными буквами с двумя нижними индексами, поэтому матрица может выглядеть так:
гпц ml2 m13 m14
м = Ш21 m22 m23 m24
m31 Ш32 m33 m34
m41 m42 m43 m44
В математике и физике нумерация столбцов и строк в матрицах обычно начинается с единицы. Однако в компьютерах для хранения двумерных матриц обычно используются двумерные массивы, а индексы в массивах в языке С++ more…

Tags: PMMathLibVIO, действия, Матрицы

Related posts

Thursday, May 15th, 2008 | Author: admin

Поскольку векторы очень важны в ЗБ-программировании, то вспомогательная библиотека D3DX для Direct3D содержит несколько структур и функций для работы с двумерными, трехмерными и четырехмерными векторами. Хотя в библиотеке физического моделирования есть все, что нам понадобится для работы с векторами, учтите, что с ними можно работать и с помощью Direct3D. Мы будем использовать функции библиотеки Direct3D, работая с ЗО-графикой, но для физических расчетов мы будем пользоваться только нашей библиотекой физического моделирования. Это позволит нам сделать большую часть кода легко переносимой между разными платформами. Если вы захотите применять для написания игр вместо DirectX что-то другое, вы сможете использовать большую часть кода из этой книги.
Структуры для векторов называются D3DXVECTOR2, D3DXVECTOR3 и D3DXVECTOR4 для двумерных, трехмерных и more…

Tags: D3DXVECTOR2, PMMathLibVIO, Матрицы

Related posts

Saturday, May 10th, 2008 | Author: admin

Когда говорят, что столкновение является упругим, то подразумевается, что стена твердая, а сталкивающийся с ней предмет представляет собой нечто вроде теннисного мяча, который отскочит от стены после столкновения. Если со стеной столкнется комок грязи или снежок, то отскока не будет, и такое столкновение называется неупругим. Мы поговорим о столкновениях подробнее, когда доберемся до посвященной им главы.
Поскольку в нашей задаче моделируется упругое столкновение, нам нужно только найти компонент вектора v’, перпендикулярный стене, то есть компонент, направленный параллельно вектору П . Компонент вектора v”, параллельный стене, можно просто скопировать из такого же компонента вектора v. more…

Tags: D3DXVECTOR2, Замечание, Матрицы

Related posts

Monday, May 05th, 2008 | Author: admin

Иногда единичные векторы обозначаются не х и у, a i и j. В любом случае это векторы с нормой 1, направленные вдоль осей х и у.
Любой вектор в декартовой системе координат можно представить в виде суммы произведений единичных векторов и скаляров. Другими словами, для любого вектора
v = ах + byдля некоторых а и Ь. Здесь а и b есть координаты вектора в системе координат, определенной единичными векторами х и у. Поэтому если а = 2 и b = 3, то координаты вектора равны (2, 3), и вектор можно записать в виде2х + 3у или 2i + 3j. Единичные векторы для третьего и четвертого измерений обычно обозначаются Z и W или кит. Их компоненты равны соответственно (0, 0, 1) и (0, 0, 0, 1).

Обозначение ( W или m ) нечасто встречается в книгах по математике. Чаще оно применяется в программировании ЗО-графики. more…

Tags: D3DXVECTOR2, Вектор, Замечание

Related posts