Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lrgraph

.pdf
Скачиваний:
12
Добавлен:
11.03.2016
Размер:
749.88 Кб
Скачать

61

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;

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