Матрицы вращения в пространстве Матрица вращения вокруг оси х Матрица вращения вокруг оси 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. Алгоритм увеличения или уменьшения
-
Начало.
-
Перемещение «бегунка».
Таблица 3
Условие: |
Действие: |
Увеличение / уменьшение объектов |
scal := tbScale.Position; |
-
Уменьшение или увеличивание объектов, в соответствии с положением «бегунка».
-
Конец.
2.2.4. Алгоритм перспективной проекции
-
Начало.
-
Ввод координат точек схода.
Таблица 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; |
-
Задание точек схода и расчет матрицы перспективной проекции, после чего пересчет координат вершин объектов.
-
Конец.
2.3. Выбор и обоснование языка программирования.
При выборе языка программирования учитывалось следующее: доступность языка, удобный графический интерфейс, легкость в использовании, хорошее знание языка автором программы. Всем этим требованиям отвечает язык программирования OpenGL.