lrgraph
.pdf61
z12m:=z12x+sz;
z21m:=z21x+sz;
z22m:=z22x+sz;
Linii(x11m, x12m, y11m, y12m, z11m, z12m, x21m, x22m, y21m, y22m, z21m, z22m); {ото-
бражение линий в конечном положении}
Readln;
Closegraph; {выход из графического режима} end.
Варианты задания
Создать программу, реализующую средствами графики языка программирования TurboPascal изображение, включающее:
а) в соответствии с приведенным ниже по вариантам заданием проекцию трехмерных координат;
б) в начале координат исходное изображение;
в) преобразованное в соответствии с заданием изображение.
1)Прямоугольная изометрическая проекция. ─┼─ -образная фигура исходно находится
вплоскости XY, а затем сдвигается по оси X на 70 пикселей, оси Y - на -40 пикселей и пово-
рачивается вокруг оси Z на 60о, оси X - на 120о по часовой стрелке.
2) Прямоугольная диметрическая проекция. ─┼─ - образная фигура исходно находится в плоскости XZ, а затем сдвигается по оси Y на 140 пикселей, по оси Z - на -70 пикселей и по-
ворачивается вокруг оси Y на 70о по часовой стрелке, вокруг оси X на 50о против часовой стрелки.
3) Косоугольная фронтальная изометрическая проекция. ┌── - образная фигура ис-
ходно находится в плоскости YZ, а затем сдвигается по оси Y на -80 пикселей, по оси Z - на
100 пикселей, поворачиваясь вокруг оси Z на 90о по часовой, а вокруг оси Y на 120о против часовой стрелки.
4) Косоугольная горизонтальная изометрическая проекция. ┌── - образная фигура ис-
ходно находится в плоскости XY, а затем сдвигается по оси X на -50 пикселей, а по оси Y на
62
130 пикселей, поворачиваясь вокруг оси Y на 80о против часовой, вокруг оси X на 90о по часо-
вой стрелке.
5) Косоугольная фронтальная диметрическая проекция. ─┬─ - образная фигура исход-
но находится в плоскости XZ, а затем сдвигается по оси X на 40, по оси Z - на -70 пикселей,
поворачиваясь вокруг оси Y на 60о, вокруг оси Z на 100о против часовой стрелки.
6) Прямоугольная изометрическая проекция. ─┬─ - образная фигура исходно нахо-
дится в плоскости XY, а затем сдвигается по оси X на 90 пикселей, оси Y - на 140 пикселей и поворачивается вокруг оси Z на 80о, оси X - на 100о по часовой стрелке.
7) Прямоугольная диметрическая проекция. Х - образная фигура исходно находится в плоскости XZ, а затем сдвигается по оси Y на -90 пикселей, по оси Z - на 170 пикселей и по-
ворачивается вокруг оси Y на 45о по часовой стрелке, вокруг оси X на 70о против часовой стрелки.
8) Косоугольная фронтальная изометрическая проекция. Х - образная фигура исходно находится в плоскости YZ, а затем сдвигается по оси Y на 180 пикселей, по оси Z - на 70 пик-
селей, поворачиваясь вокруг оси Z на 90о по часовой, а вокруг оси Y на 110о против часовой стрелки.
9) Косоугольная горизонтальная изометрическая проекция. ││- образная фигура ис-
ходно находится в плоскости XY, а затем сдвигается по оси X на 150 пикселей, а по оси Y на -
130 пикселей, поворачиваясь вокруг оси Y на 50о против часовой, вокруг оси X на 40о по часо-
вой стрелке.
10) Косоугольная фронтальная диметрическая проекция. ││ - образная фигура ис-
ходно находится в плоскости XZ, а затем сдвигается по оси X на 90, по оси Z - на -70 пиксе-
лей, поворачиваясь вокруг оси Y на 30о, вокруг оси Z на 110о против часовой стрелки.
11) Прямоугольная изометрическая проекция. ─┼─ - образная фигура исходно нахо-
дится в плоскости XY, а затем сдвигается по оси X на -70 пикселей, оси Y - на 80 пикселей и поворачивается вокруг оси Z на 50о, оси X - на 100о по часовой стрелке.
12) Прямоугольная диметрическая проекция. ─┼─ - образная фигура исходно находит-
ся в плоскости XZ, а затем сдвигается по оси Y на -60 пикселей, по оси Z - на 120 пикселей и поворачивается вокруг оси Y на 90о по часовой стрелке, вокруг оси X на 80о против часовой стрелки.
63
13) Косоугольная фронтальная изометрическая проекция. ┌── - образная фигура ис-
ходно находится в плоскости YZ, а затем сдвигается по оси Y на 180 пикселей, по оси Z - на -
40 пикселей, поворачиваясь вокруг оси Z на 70о по часовой, а вокруг оси Y на 100о против ча-
совой стрелки.
14) Косоугольная горизонтальная изометрическая проекция. ┌── -образная фигура ис-
ходно находится в плоскости XY, а затем сдвигается по оси X на 150 пикселей, а по оси Y на -
40 пикселей, поворачиваясь вокруг оси Y на 20о против часовой, вокруг оси X на 40о по часо-
вой стрелке.
15) Косоугольная фронтальная диметрическая проекция. ─┬─ - образная фигура ис-
ходно находится в плоскости XZ, а затем сдвигается по оси X на 40, по оси Z - на 140 пиксе-
лей, поворачиваясь вокруг оси Y на 40о, вокруг оси Z на 150о против часовой стрелки.
16) Прямоугольная изометрическая проекция. ─┬─ - образная фигура исходно нахо-
дится в плоскости XY, а затем сдвигается по оси X на 40 пикселей, оси Y - на -90 пикселей и поворачивается вокруг оси Z на 50о, оси X - на 100о по часовой стрелке.
17) Прямоугольная диметрическая проекция. Х - образная фигура исходно находится в плоскости XZ, а затем сдвигается по оси Y на 130 пикселей, по оси Z - на -70 пикселей и по-
ворачивается вокруг оси Y на 45о по часовой стрелке, вокруг оси X на 90о против часовой стрелки.
18) Косоугольная фронтальная изометрическая проекция. Х - образная фигура исходно находится в плоскости YZ, а затем сдвигается по оси Y на -80 пикселей, по оси Z - на 120 пик-
селей, поворачиваясь вокруг оси Z на 90о по часовой, а вокруг оси Y на 120о против часовой стрелки.
19) Косоугольная горизонтальная изометрическая проекция. ││ - образная фигура ис-
ходно находится в плоскости XY, а затем сдвигается по оси X на -80 пикселей, а по оси Y на -
110 пикселей, поворачиваясь вокруг оси Y на 70о против часовой, вокруг оси X на 70о по часо-
вой стрелке.
20) Косоугольная фронтальная диметрическая проекция. ││ - образная фигура исход-
но находится в плоскости XZ, а затем сдвигается по оси X на 80, по оси Z - на -50 пикселей,
поворачиваясь вокруг оси Y на 60о, вокруг оси Z на 140о против часовой стрелки.
64
21)Прямоугольная изометрическая проекция. ┴ -образная фигура исходно находится
вплоскости XY, а затем сдвигается по оси X на 70 пикселей, оси Y - на -40 пикселей и пово-
рачивается вокруг оси Z на 60о, оси X - на 120о по часовой стрелке.
22) Прямоугольная диметрическая проекция. ═ - образная фигура исходно находится в плоскости XZ, а затем сдвигается по оси Y на 140 пикселей, по оси Z - на -70 пикселей и по-
ворачивается вокруг оси Y на 70о по часовой стрелке, вокруг оси X на 50о против часовой стрелки.
23) Косоугольная фронтальная изометрическая проекция. ┐ - образная фигура исходно находится в плоскости YZ, а затем сдвигается по оси Y на -80 пикселей, по оси Z - на 100 пик-
селей, поворачиваясь вокруг оси Z на 90о по часовой, а вокруг оси Y на 120о против часовой стрелки.
24) Косоугольная горизонтальная изометрическая проекция. ┤ - образная фигура ис-
ходно находится в плоскости XY, а затем сдвигается по оси X на -50 пикселей, а по оси Y на
130 пикселей, поворачиваясь вокруг оси Y на 80о против часовой, вокруг оси X на 90о по часо-
вой стрелке.
25) Прямоугольная диметрическая проекция. Х - образная фигура исходно находится в плоскости XZ, а затем сдвигается по оси Y на -70 пикселей, по оси Z - на 160 пикселей и по-
ворачивается вокруг оси Y на 45о против часовой стрелки, вокруг оси X на 70о против часовой стрелки.
26) Косоугольная фронтальная изометрическая проекция. Х - образная фигура исходно находится в плоскости YZ, а затем сдвигается по оси Y на 80 пикселей, по оси Z - на 170 пик-
селей, поворачиваясь вокруг оси Z на 60о по часовой, а вокруг оси Y на 120о против часовой стрелки.
Выполнение лабораторной работы
1.Получить задание у преподавателя.
2.Написать и отладить на компьютере программу в пошаговом режиме, т.е. синтези-
ровать и проверить каждый вид преобразования отдельно, а затем свести их вместе. Если изо-
бражение искажено, ввести масштабирующий коэффициент.
65
3.Результат работы программы продемонстрировать преподавателю.
4.Напечатать листинг программы.
Содержание отчета
Очет включает:
1)содержание задания;
2)блок-схему программы;
3)листинг программы.
Контрольные вопросы
1.Изменится ли результат трехмерных преобразований если поменять местами сдвиг
иповорот?
2.Какие существуют виды трехмерных проекций?
3.Почему промежуточные координаты преобразуемого изображения в программе примера определены как переменные типа real, а конечные - типа integer?
4.Какое разрешение экрана не требует введения масштабирующих коэффициентов?
5.Почему при отображении трехмерной прямоугольной системы координат на плос-
кости расчет координаты Х двумерной системы не учитывает значение координаты Z трех-
мерной системы?
Рекомендуемая литература
1.Котов Ю.В. Как рисует машина. - М.: Наука., 1988. - 224 с.
2.Грувер М., Зиммер Э. САПР и автоматизация производства. - М.: Мир, 1987. - 528 с.
3.Белкин Ю.Б. Применение методов инженерной графики в судостроении. - Л.: Судострое-
ние, 1987. - 128 с.
4.Белецкий Я. Турбо Паскаль с графикой для персональных компьютеров. - М.: Машино-
строение, 1991. - 320 с.
66
Лабораторная работа №8
Динамическое преобразование трехмерных координат
Цель работы: изучение алгоритмов динамических преобразований в трехмерном пространстве с отображением результата преобразований на плоскости.
Введение
Задачи подобного вида возникают в процессе отображения на экране компьютера результатов трехмерного моделирования динамических перемещений технологического оборудования (роботов, автоматических линий и т.п.). Математический аппарат таких преобразований был рассмотрен в предыдущей лабораторной работе, а методы отображения динамического трехмерного изображения на экране компьютера базируются на алгоритмах, предложенных в лабораторных работах №2, 4 и 7.
Трехмерное моделирование сложной системы, состоящей из нескольких элементов, предполагает два варианта просчета трехмерных координат:
элементы движутся независимо друг от друга - их координаты также рассчитываются независимо друг от друга в трехмерной системе;
элементы в процессе перемещения всей системы совершают также относительные перемещения по отношению друг к другу (отдельные звенья манипулятора робота и т.п.) - данный случай требует введения для некоторых элементов моделируемой системы локальных трехмерных координат с постоянным просчетом координат в данной системе и последующим переводом в координаты глобальной трехмерной системы.
Описание среды программирования
Как и в предыдущих лабораторных работах, реализующих динамическое изображение, предлагается использовать алгоритм со сменой графических страниц. Поскольку динамическое трехмерное изображение, в общем случае, допускает изменение шести параметров (три координаты и три угла поворота), то при программной реализации требуется четко определить параметр, используемый в качестве переменной цикла при преобразовании. Обычно данная задача решается на основе анализа конкретного задания на моделирование.
67
Пример программы:
Требуется отобразить на экране перемещение в трехмерном пространстве системы из двух параллельных линий. Исходно координаты концов линий имеют значения:
линия 1 - (50, 0, 0; 50, 100, 0).
линия 2 - (0, 0, 0; 0, 100, 0);
Линия 1 в процессе перемещения сдвигается вдоль оси X на 120 пикселей, а линия 2 дополни-
тельно совершает полный оборот вокруг линии 1, т.е. линия 1 является для нее осью враще-
ния.
Поскольку имеет место второй вариант перемещения, то целесообразно ввести ло-
кальную трехмерную систему, привязанную к линии 1, т.е. начальная точка локальной систе-
мы имеет координаты (50, 0, 0) относительно глобальной, ось Y локальной системы совпадает с линией 1, оси Z обеих систем параллельны. Тогда начальные значения координат концов линий в локальной системе:
линия 1 - (0, 0, 0; 0, 100, 0).
линия 2 - (-50, 0, 0; -50, 100, 0);
Исходно локальная система сдвинута по оси X на 50 пикселей относительно глобаль-
ной трехмерной системы и в процессе перемещения этот сдвиг линейно растет. Перемещение только по оси X предполагает, что координаты концов линий по осям Y и Z в глобальной и локальной трехмерных системах совпадают и различаются только по оси X. В качестве пере-
менной цикла выбран угол поворота линии 2 относительно линии 1. На каждом шаге угол увеличивается на 1 градус, при этом сдвиг по оси X имеет дискрет примерно 0.333 пикселя.
Как и в предыдущей лабораторной работе используем прямоугольную изометрическую про-
екцию.
Листинг программы
Program Lr8;
uses {подключение требуемых модулей}
Graph, Crt;
68
var
GraphDriver:integer; {номер графического драйвера}
GraphMode:integer; {номер графического подрежима}
mx, my:word; {параметры масштабирования изображения} k:real; {коэффициент масштабирования изображения}
x11, x12, y11, y12, z11, z12:integer; {координаты линии 1 в локальной системе координат} x21, x22, y21, y22, z21, z22:integer; {исходные координаты линии 2 в локальной системе
координат}
x21y, x22y, y21y, y22y, z21y, z22y:real; {координаты линии 2 в локальной системе коор-
динат после поворота вокруг оси Y} x1m, x2m:integer; {координаты концов линий по оси X после сдвига }
dx, dy:integer; {смещение глобальной трехмерной системы координат относительно ко-
ординатной системы экрана}
ay:real; {угол поворота линии 2 относительно оси Y в радианах} i:integer; {переменная цикла}
sx:real; {сдвиг локальной трехмерной системы координат относительно глобальной} ns:byte; {номер графической страницы}
procedure XYZ(xn, yn:integer); {процедура построения трехмерной координатной системы на экране. Листинг приведен в предыдущей работе}
begin GraphDriver:=3; GraphMode:=1;
InitGraph(GraphDriver, GraphMode, ''); {запуск графического режима}
GetAspectRatio(mx, my); {определение параметров масштабирования} k:=mx/my; {определение коэффициента масштабирования}
dx:=320; {задание положения глобальной трехмерной системы координат относительно координатной системы экрана}
dy:=200;
69
sx:=50; {задание начального положения локальной трехмерной системы координат отно-
сительно глобальной}
ns:=0; {установка номера активной графической страницы}
SetTextJustify(0,0); {установка стиля выравнивания текста}
SetTextStyle(0, 0, 1); {установка стиля выравнивания текста} x11:=0; {координаты линии 1 в локальной системе координат} y11:=0;
z11:=0;
x12:=0;
y12:=100;
z12:=0;
x21:=-50; {координаты линии 2 в локальной системе координат} y21:=0;
z21:=0; x22:=-50; y22:=100; z22:=0;
for i:=0 to 360 do {цикл по углу поворота линии 2 вокруг линии 1} begin
ay:=3.14*i/180; {перевод угла поворота в радианы}
if ns=0 then {смена активной и видимой графических страниц} begin
SetActivePage(0);
SetVisualPage(1) end
else begin
SetActivePage(1);
SetVisualPage(0)
70
end;
SetBkColor(9); {установка цвета фона изображения}
ClearDevice; {очистка активной страницы}
XYZ(dx, dy); {прорисовка трехмерной координатной системы}
SetLineStyle(0, 0, 3); {установка толщины линий для изображения перемещающихся элементов}
SetColor(8); {установка цвета линии 1}
x1m:=Round(x11+sx); {координаты линии 1 по оси X после очередного сдвига} x2m:=Round(x12+sx);
{отображение линии 1 на экране}
Line(dx+Round(0.71*(y11-x1m)), dy+Round(k*0.82*(-z11 +0.5*(x1m+ y11))), dx+Round(0.71*(y12-x2m)), dy+Round(k*0.82*(-z12+0.5*(x2m+y12))));
SetColor(13); {установка цвета линии 2}
x21y:=x21*cos(ay)+z21*sin(ay); {расчет координат линии 2 в локальной трехмерной системе после поворота вокруг оси Y}
y21y:=y21;
z21y:=-x21*sin(ay)+z21*cos(ay);
x22y:=x22*cos(ay)+z22*sin(ay);
y22y:=y22;
z22y:=-x22*sin(ay)+z22*cos(ay);
x1m:=Round(x21y+sx); {координаты линии 2 после очередного сдвига по оси X}
x2m:=Round(x22y+sx);
{отображение линии 2 на экране}
Line(dx+Round(0.71*(y21y-x1m)), dy+Round(k*0.82*(-z21y+0.5*(x1m+ y21y))), dx+Round(0.71*(y22y-x2m)), dy+Round(k*0.82*(-z22y+0.5*(x2m+y22y))));
if ns=0 then {смена номера активной графической страницы} ns:=1
else ns:=0;