чтобы преобразовать вектор скорее чем
ПРИМЕЧАНИЕ, чтобы преобразовать вектор скорее чем точка, не добавьте в векторе сдвига М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
|
<
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий