ObjectARX, AutoCAD. Среда программирования библиотеки C++



         

Матрицы Преобразования


Функции acedDragGen (), acedGrVecs (), acedNEntSelP (), и acedXformSS () умножают входные векторы на матрицу преобразования, определенную как 4x4 массив реальных значений.

typedef ads_real ads_matrix [4] [4];

Первые три столбца матрицы определяют масштабирование и вращение. Четвертый столбец матрицы - вектор сдвига. ObjectARX определяет символ T, чтобы представить координату этого вектора, следующим образом:

 #define T 3

Матрица может быть выражена следующим образом:

М. 00

 М. 01

М. 02

 М. 03

М. 10

М. 11

 М. 12

 М. 13

М. 20

 М. 21

 М. 22

М. 23

0.0

0.0

0.0

1.0

Следующая функция инициализирует единичную матрицу.

void ident_init(ads_matrix id)

{

int i, j;

for (i=0; i<=3; i++)

for (j=0; j<=3; j++)

id[i][j] = 0.0;

for (i=0; i<=3; i++)

id[i][i] = 1.0;

}

Функции, которые передают параметры типа ads_matrix, обращаются с точкой как вектор столбца измерения 4. Точка выражена в гомогенных координатах, где четвертый элемент вектора точки - коэффициент масштаба, который обычно устанавливается в 1.0. Конечная{*заключительная*} строка матрицы имеет номинальное значение [0,0,0,1]; это игнорируется функциями тот проход ads_matrix параметры. В этом случае, следующие матричные результаты умножения от приложения преобразования к точке:

X '

М.00

М.01

М.02

М.03

X

Y '

=

М.10

М.11

М.12

М.13

x

Y

Z '

М.20

М.21

М.22

М.23

Z

1.0

0.0

0.0

0.0

1.0

1.0

Это умножение дает нам индивидуальные координаты точки следующим образом:

X ' = М. 00 X + М. 01 Y + М. 02 Z + М. 03 (1.0)

Y ' = М. 10 X + М. 11 Y + М. 12 Z + М. 13 (1.0)

Z ' = М. 20 X + М. 21 Y + М. 22 Z + М. 23 (1.0)

Как этот показ уравнений, коэффициент масштаба и последняя строка матрицы не имеет никакой эффект и игнорируется. Это известно как афинное преобразование.




Содержание  Назад  Вперед