Теперь давайте попробуем применить полученные
Теперь давайте попробуем применить полученные знания на практике и воспользуемся объектом C3dMatrix, содержащим массив вещественных величин 4х4, для переноса вектора. Чтобы вы получше представляли себе класс C3dMatrix, привожу исходный текст его конструктора:
C3dMatrix::C3dMatrix()
{
т_00=1.0; т_01°0.0; т_02=0.0; т_03=0.0;
т_10=0.0; т_11=1.0; т_12=0.0; т_13=0.0;
т_20=0.0; т_21=0.0; т_22=1.0; т_23=0.0;
т_30=0.0; т_31=0.0; т_32=0.0; т_33=1.0;
}
В исходном состоянии, задаваемом в конструкторе, эта матрица является матрицей идентичного преобразования, или единичной матрицей. Если умножить вектор на такую матрицу, он не изменится. Приведенный ниже фрагмент, использующий объект C3dMatrix, осуществляет перенос вектора х, у, z со смещениями координат dx, dy, dz:
C3dVector v (х, у, z) ;
C3dMatrix т;
т.Translate(dx, dy, dz);
v = т * v;
Объект C3dVector инициализируется элементами исходного вектора. Затем, после конструирования объекта C3dMatrix (который в первоначальном состоянии совпадает с матрицей идентичного преобразования), вызывается его функция
/b>
Глава 5. Поеобоазования
Translate для занесения в матрицу преобразования переноса. Наконец, вектор умножается на матрицу, и результат присваивается исходному вектору.
Не следует полагать, будто функция C3dMatrix: translate просто инициализирует матрицу; как нетрудно убедиться по приведенному ниже фрагменту, на самом деле она комбинирует преобразование переноса с любыми преобразованиями, уже занесенными в матрицу:
void C3dMatrix::Translate(double dx, double dy, double dz)
{
C3dMatrix tx( 1, О, О, О,
О, 1, О, О, О, 0, 1, О, dx, dy, dz,l);
*this *=
tx;
Временная матрица инициализируется элементами для преобразования переноса. Затем текущая матрица умножается на временную матрицу переноса, а результат снова присваивается текущей матрице.
Пользуясь различными функциями класса C3dMatrix, можно комбинировать в одной матрице сразу несколько преобразований и затем применять их к нужному количеству векторов. Удобно также создать отдельные объекты C3dMatrix, каждый из которых соответствует отдельному преобразованию, и просто перемножить их для получения итогового преобразования:
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий