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



         

Матрицы Преобразования - часть 2


ПРИМЕЧАНИЕ, чтобы преобразовать вектор скорее чем точка, не добавьте в векторе сдвига М3 М13 М23 (от четвертого столбца матрицы преобразования).

Следующая функция осуществляет предыдущие уравнения, чтобы преобразовать единственную точку:

void xformpt(xform, pt, newpt)

ads_matrix xform;

ads_point pt, newpt;

{

int i, j;

newpt[X] = newpt[Y] = newpt[Z] = 0.0;

for (i=X; i<=Z; i++) {

for (j=X; j<=Z; j++)

newpt[i] += xform[i][j] * pt[j];

// Add the translation vector.

newpt[i] += xform[i][T];

}

}

Следующее рисунок суммирует некоторые основные геометрические преобразования.

( Значения в ads_matrix - фактически ads_real, но им показывают здесь как целые числа для удобочитаемости и соответствовать математическому соглашению.)

1

0

0

0

1

0

0

TX

SX

0

0

0

cos

-sin

0

0

0

1

0

0

0

1

0

TY

0

SY

0

0

sin

cos

0

0

0

0

1

0

0

0

1

TZ

0

0

SZ

0

0

0

1

0

0

0

0

1

0

0

0

1

0

0

0

1

0

0

0

1

Translation                               scaling                      2D rotation (in the XY plane)

AcedXformSS () функция — в отличие от acedDragGen(), acedGrVecs(), или acedNEntSelP() функции — требует, чтобы  матрица делала однородное масштабирование. То есть в матрице преобразования, которую Вы проходите к acedXformSS (), элементы в векторе масштабирования S X S Y S Z, должны весь быть равными; в матричном примечании, М. 00 = М. 11 = М. 22. Трехмерное вращение - слегка различный случай, как показано в следующем рисунке:

cos

-sin

0

0

1

0

0

0

cos

0

sin

0

sin

cos

0

0

0

cos

-sin

0

0

1

0

0

0

0

1

0

0

sin

cos

0

-sin

0

cos

0

0

0

0

1

0

0

0

1

0

0

0

1

<


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