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

Пример программы

В первом квадранте локальной системы координат нарисовать две вертикальные параллельные линии, а затем сдвинуть их вверх и вправо на 100 пикселей и повернуть на 30о против часовой стрелки относительно начала локальных координат.

Начало локальной системы координат расположим в точке (300, 320) пикселей. Можно дополнить программу возможностью задания начала в диалоговом режиме при каждом запуске программы. Фрагмент программы, используемый для создания на экране локальной системы координат, выделен в отдельную процедуру, чтобы его можно было использовать в следующей лабораторной работе.

Листинг программы

Program Linii;

uses

Graph, Crt;

var

GraphDriver:integer;

GraphMode:integer;

mx, my:word; {кооффициенты масштабирования}

x11, x12, x21, x22, y11, y12, y21, y22:integer; {координаты концов линий}

dx, dy:integer; {сдвиг локальных координат относительно глобальных}

a:real; {угол поворота}

x0, y0:integer; {величина сдвига линий в системе локальных координат}

procedure XY(xn, yn:integer); {процедура создания на экране локальных координат}

begin

SetLineStyle(0,0,1); {установка стиля линий}

Line(xn, 300, xn, 50); {отображение на экране системы координат}

Line(xn, 50, xn-5, 60);

Line(xn, 50, xn+5, 60);

Line(40, yn, 600, yn);

Line(600, yn, 593, yn-3);

Line(600, yn, 593, yn+3);

SetColor(4); {установка цвета для вывода символов}

SetTextJustify(0,0); {установка стиля выравнивания текста}

SetTextStyle(0, 0, 1); {установка стиля текста}

OutTextXY(597, yn+15, 'X'); {вывод заголовка оси Х}

OutTextXY(xn-10, 50, 'Y'); {вывод заголовка оси Y}

end;

begin

GraphDriver:=3; {установка графического режима EGA}

GraphMode:=1; {установка подрежима с разрешением 640x350}

InitGraph(GraphDriver, GraphMode, '' '');

SetBkColor(9); {установка светло-синего цвета фона}

ClearDevice; {закрашивание экрана цветом фона}

GetAspectRatio(mx, my); {определение коэффициентов масштабирования}

dx:=320; {задание величин сдвига локальной системы координат относительно глобальной}

dy:=300;

XY(dx, dy); {вычерчивание локальной системы координат}

SetColor(7); {установка цвета исходных линий}

SetLineStyle(0, 0, 3); {изменение толщины линий}

x11:=50; {задание координат концевых точек линий в локальной системе координат}

y11:=50;

x12:=50;

y12:=150;

x21:=100;

y21:=50;

x22:=100;

y22:=150;

{вычерчивание исходных линий}

Line(dx+x11, dy-Round(mx/my*y11), dx+x12, dy-Round(mx/my*y12));

Line(dx+x21, dy-Round(mx/my*y21), dx+x22, dy-Round(mx/my*y22));

SetColor(13); {установка цвета преобразованных линий}

a:= 30*6.28/360; {определение угла поворота в радианах}

x0:=100; {задание величин сдвига линий в локальной системе координат}

y0:=100;

Line(dx+Round(cos(a)*x11-sin(a)*y11)+x0, dy-(Round(mx/my*(sin(a)*x11+cos(a)*y11) +y0)), dx+Round(cos(a)*x12-sin(a)*y12)+x0, dy-(Round(mx/my*(sin(a)*x12+cos(a) *y12)+y0)));

Line(dx+Round(cos(a)*x21-sin(a)*y21)+x0, dy-(Round(mx/my*(sin(a)*x21+cos(a)*y21) +y0)), dx+Round(cos(a)*x22-sin(a)*y22)+x0, dy-(Round(mx/my*(sin(a)*x22+cos(a) *y22)+y0)));

Readln;

Closegraph;

end.

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