Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4. Преобразование координат.doc
Скачиваний:
9
Добавлен:
09.11.2019
Размер:
706.05 Кб
Скачать

4.3. Цепочки преобразований координат

Представим себе цепочку вложенных систем координат (рис. 4.8).

Система координат СК0 привязана к СК1, следовательно, должен быть известен координатный фрейм F01, система координат СК1, в свою очередь, привязана к СК2 и должен быть известен координатный фрейм F12 и т.д.

Эту же цепочку вложений СК будем изображать так:

Пусть в СК0 задана точка A0. Найти матрицу преобразования F03 и представление этой же точки в СК3.

– точка A в СК1;

– точка A в СК2;

–точка A в СК3;

F03 = F23F12F01 – матрица преобразования из СК0 в СК3.

В общем случае матрица преобразования из СК0 в СКN:

F0N = F(N–1)N  F23F12F01. (4.1)

Обратная задача. Пусть в СК3 задана точка A3. Найти матрицу преобразования F30 и представление этой же точки в СК0.

Если известны F01, F12, F23, то легко находятся матрицы , и как обратные известным, тогда:

;

;

( – матрица преобразования из СК3 в СК0).

В общем случае:

FN0 = F10F21F32 FN((N-1). (4.2)

Как видим, все формулы преобразования координат не отличаются от формул преобразования модели. Подробнее рассмотрим этот вопрос позже.

4.4. Элементарные матрицы преобразования координат в 2d

Рис. 4.9. Элементарные матрицы преобразования координат в 2D

4.5. Преобразование координат и координатный фрейм в 3d

В 3D матрица F10 преобразования координат из СК1 в СК0 или, что то же, координатный фрейм, задающий привязку СК1 относительно СК0, имеет вид:

.

Как и в 2D, здесь

– точка положения системы координат СК1 относительно СК0:

– единичный вектор оси X1 СК1 относительно СК0;

– единичный вектор оси Y1 СК1 относительно СК0.

– единичный вектор оси Z1 СК1 относительно СК0.

Все ранее полученные соотношения для 2D справедливы и для 3D.

4.6. Элементарные матрицы преобразования координат в 3d

Как известно, все элементарные матрицы преобразования координат и координатные фреймы в 2D и 3D совпадают с определенными ранее типовыми элементарными матрицами T(); R(); S().

В преобразовании S(sx, sy, sz) имеется важный частный случай. Пусть , при этом, .

Это случай, когда в СК1 оси X1 и Y1 совпадают с X0 и Y0, а координата Z1 всегда равна нулю. Но по существу это преобразование из 3D в 2D, т.е. получение проекций 3D объекта на плоскость X1Y1, совпадающую с плоскостью X0Y0. Поэтому о таком преобразовании можно говорить, как о преобразовании проецирования на плоскость X0Y0.

При этом не существует, поскольку . Это естественно, поскольку после операции проецирования невозможно однозначно восстановить Z-ю координату исходной точки.

4.7. Общность задач преобразования модели и преобразования координат

4.7.1. Локальные системы координат

Рассмотрим несколько примеров.

П ример 1.

glTranslatef(a, b, 0); // VM = T(a,b)

glBegin(GL_POINTS);

glVertex2f(c, d);

glEnd();

Можно провести два равноценных толкования этого фрагмента программы.

1) Точка между операторными скобками A0 задана в МСК. Матрица VМ здесь принимает значение VM=T(a, b). Первая операция обработки точки в конвейере A1=VMA0=T(a, b) A0 переводит точку A из положения A0 в положение A1. Следовательно, матрицу VM следует понимать как матрицу преобразования модели, т.е. VM=T(a, b)=M01 (рис. 4.12).

2 ) Та же точка считается заданной в системе координат пользователя, будем такую СК называть локальной (ЛСК). ЛСК свободна, она не привязана ни к какой СК, нигде не прописана в программе (возможно только в комментариях) и существует только в представлении программиста. На рис. 4.13 показано, как та же точка из рассматриваемого примера задана в ЛСК.

AL – это та же точка, заданная между операторными скобками в примере 1, но, чтобы подчеркнуть то обстоятельство, что она задана в ЛСК, помечаем ее индексом L.

Матрица VM опять принимает значение VM=T(a,b), но понимать ее будем как координатный фрейм, задающий привязку ЛСК к МСК, т.е. VM=T(a,b)=FLM.

3) Вспомним, что координатный фрейм FLM одновременно является матрицей преобразования координат из ЛСК в МСК, поэтому операцию

AM = VM∙AL=T(a,b)Al=FLM∙AL

б удем понимать как преобразование точки AL из ЛСК в точку AM в МСК. Где при этом в МСК будет точка AM при таком толковании рассматриваемого примера? Ответ на этот вопрос дает рис. 4.14. Результат тот же, как и при первом толковании программы из примера 1.

Пример 2.

glRotatef(φ,0,0,1); // VM = R(φ)

glBegin(GL_POINTS);

glVertex2f(c,0);

glEnd();

О пять два толкования этого текста.

1) A0 – начальное положение точки в МСК. VM=R(φ). Первая операция в конвейере обработки переводит точку из положения A0 в положение A1:

A1=VM∙A0= R(φ)A0=M01∙A0.

На рис. 4.15 показано положение точки A0 и A1.

2) Точка в приведенном Примере 2 задана в ЛСК, обозначим ее AL. VM=R(φ)=FLM – координатный фрейм, задающий привязку ЛСК к МСК, одновременно это матрица преобразования координат точки AL из ЛСК в координаты точки AM МСК.

Результат первой операции в конвейере обработки:

AM = VM∙AL=R(φ)AL=FLM∙AL.

П оложение точки AM в МСК в результате таких преобразований приведено на рис. 4.16. Как видим результат тот же, что и в примере 2, п.1.

Пример 3.

glScalef(2, 2, 1); // VM = S(2,2)

glBegin(GL_POINTS);

glVertex2f(3, 2);

glEnd();

1) Точка задана в МСК. VM осуществляет масштабирование и переводит точку из положения A0 в положение A1 в МСК. Результат выполнения операции

; .

2) Точка задана в ЛСК. VMкоординатный фрейм, который понимаем как матрицу преобразования из ЛСК в МСК. Легко убедиться, что положение точки в МСК будет то же, что и в предыдущем случае.

Пример 4.

void fig( ){ }

void display( )

{

glTranslatef(a, b, 0); // VM = T(a,b)

glRotatef(φ, 0, 0, 1); // VM = T(a,b)R(φ)

glScalef(1, -1, 1); // VM = T(a,b)R(φ)S(1,–1)

fig( );

}

1) Фигура fig построена в МСК; VMматрица преобразования модели над каждой точкой фигуры fig. В данном случае над каждой точкой fig осуществляется масштабирование S, вращение R и перемещение T.

Положение каждой точки fig в МСК

.

2 ) Фигура fig построена в ЛСК. Матрица VM понимается как координатный фрейм FLM, описывающий привязку ЛСК относительно МСК.

Операция над каждой точкой fig

есть преобразование точек из ЛСК в ту же точку в МСК.

,

где – положение каждой точки fig в МСК.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]