Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ДОКУМЕНТАЦИЯ.doc
Скачиваний:
5
Добавлен:
16.12.2018
Размер:
464.9 Кб
Скачать

Матрицы вращения в пространстве Матрица вращения вокруг оси х Матрица вращения вокруг оси y на угол j: на угол y:

Матрица вращения вокруг оси Z

на угол c:

Перспективная проекция

Предположим, что центр проектирования лежит на оси OZ в точке С (0, 0, с) и плоскость проектирования совпадает с плоскостью XOY. Тогда для произвольной точки М (х, у, z) координаты М* (х*, у*, z*), полученные после перспективного проектирования, находятся следующим образом:

Проектирующие параллельные линии сходятся в одной точке, которая называется точкой схода. Перспективная проекция различается по количеству точек схода: одноточечная, двухточечная и трехточечная.

Матрица перспективного преобразования Q с центром проектирования в точке С (0, 0, с):

В общем случае, когда координатные оси не параллельны картинной плоскости, таких точек три. Тогда матрица соответствующего преобразования выглядит так:

Точки (-а, 0, 0), (0, -b, 0) и (0, 0, -с) есть главные точки схода.

Матрица перспективного преобразования является невырожденной, поэтому для получения перспективной проекции трехмерного объекта на плоскости матрицу Q необходимо перемножить с матрицей параллельного проектирования :

Необходимость разработки данной программы можно обосновать несколькими аргументами.

Во-первых, данная программа создается как обучающая и при использовании позволит быстро и, что очень важно, наглядно ознакомить пользователя с методом построения трехмерного объекта с учетом перспективы - очень немногие графические программы ориентированы на обучение. А возможность закрепления на бумаге полученных результатов делает использование программы более удобным.

Во-вторых, программа основана на применении алгоритма к трехмерным объектам, что, несомненно, позволяет найти еще несколько плюсов в ее разработке. Дело в том, что это значительно расширяет круг пользователей до границ не только желающих ознакомиться с методом построением трехмерных объектов с учетом перспективы, но и нуждающихся в демонстрации наглядного построения. А это, учитывая некоторую сложность при трехмерном восприятии данных объектов, делает использование программы более удобным, чем применение бумажных иллюстраций.

2.2. Выбор, обоснование и описание метода моделирования и алгоритма.

2.2.1. Алгоритм вращения по осям координат

1. Начало.

2. Ожидание выбора пользователем действия программы.

Таблица 1

Условие:

Дейстиве:

Вращение объектов по оси ОХ

phi := PI / 180;

Cub := RotX(Cub, phi);

Cub2 := RotX(Cub2, phi);

Cub3 := RotX(Cub3, phi);

Cub4 := RotX(Cub4, phi);

Cub5 := RotX(Cub5, phi);

Cub6 := RotX(Cub6, phi);

Pr := RotX(Pr, phi);

Вращение объектов по оси ОY

psi := PI / 180;

Cub := RotY(Cub, psi);

Cub2 := RotY(Cub2, psi);

Cub3 := RotY(Cub3, psi);

Продолжение таблицы 1

Условие:

Дейстиве:

Cub4 := RotY(Cub4, psi);

Cub5 := RotY(Cub5, psi);

Cub6 := RotY(Cub6, psi);

Pr := RotY(Pr, psi);

Вращение объектов по оси OZ

hi := PI / 180;

Cub := RotZ(Cub, hi);

Cub2 := RotZ(Cub2, hi);

Cub3 := RotZ(Cub3, hi);

Cub4 := RotZ(Cub4, hi);

Cub5 := RotZ(Cub5, hi);

Cub6 := RotZ(Cub6, hi);

Pr := RotZ(Pr, hi);

Отмена вращения по осям координат

Cub := FCub;

Cub2 := FCub2;

Cub3 := FCub3;

Cub4 := FCub4;

Cub5 := FCub5;

Cub6 := FCub6;

Остановка вращения по осям координат

Timer1.Enabled:= chbRotate.Checked;

3. Вращение объектов либо по оси ОХ, либо по оси ОY, либо по оси OZ, пока не нажата кнопка «Сброс» - для возврата в исходное положение, либо не приостановлено вращение.

4. Конец.

2.2.2. Алгоритм вращения осей координат

1. Начало.

2. Ожидание выбора пользователем действия программы.

Таблица 2

Условие:

Действие:

Вращение оси ОХ

x := x + 1;

Вращение оси OY

y := y + 1;

Вращение оси OZ

z := z + 1;

Отмена вращения осей координат

x := 30;

y := -40;

z := 0;

Остановка вращения осей координат

Timer1.Enabled := chbRotCoord.Checked;

3. Вращение либо оси OX, либо оси OY, либо оси OZ, пока не нажата кнопка «Сброс» - для возврата в исходное положение, либо не приостановлено вращение.

4. Конец.

2.2.3. Алгоритм увеличения или уменьшения

  1. Начало.

  2. Перемещение «бегунка».

Таблица 3

Условие:

Действие:

Увеличение / уменьшение объектов

scal := tbScale.Position;

  1. Уменьшение или увеличивание объектов, в соответствии с положением «бегунка».

  2. Конец.

2.2.4. Алгоритм перспективной проекции

  1. Начало.

  2. Ввод координат точек схода.

Таблица 4

Условие:

Действие:

Задание точек схода и расчет матрицы перспективной проекции

if StrToFloat(Form2.edX.Text) <> StrToFloat('0') then

xx := 1 / StrToFloat(Form2.edX.Text)

else xx := 0;

if StrToFloat(Form2.edY.Text) <> StrToFloat('0') then

yy := 1 / StrToFloat(Form2.edY.Text)

else yy := 0;

if StrToFloat(Form2.edZ.Text) <> StrToFloat('0') then

zz := 1 / StrToFloat(Form2.edZ.Text)

else zz := 0;

//Задаём матрицу перспективной проекции

Perspect[0, 0] := 1; Perspect[0, 1] := 0;

Perspect[0, 2] := 0; Perspect[0, 3] := xx;

Perspect[1, 0] := 0; Perspect[1, 1] := 1;

Perspect[1, 2] := 0; Perspect[1, 3] := yy;

Perspect[2, 0] := 0; Perspect[2, 1] := 0;

Perspect[2, 2] := 1; Perspect[2, 3] := zz;

Perspect[3, 0] := 0; Perspect[3, 1] := 0;

Perspect[3, 2] := 0; Perspect[3, 3] := 1;

  1. Задание точек схода и расчет матрицы перспективной проекции, после чего пересчет координат вершин объектов.

  2. Конец.

2.3. Выбор и обоснование языка программирования.

При выборе языка программирования учитывалось следующее: доступность языка, удобный графический интерфейс, легкость в использовании, хорошее знание языка автором программы. Всем этим требованиям отвечает язык программирования OpenGL.