Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Пример программы. В локальной системе координат нарисовать две параллельные вертикальные линии



В локальной системе координат нарисовать две параллельные вертикальные линии. Нижняя координата левой линии находится в точке (20, 10). Сдвинуть данную точку до координаты (60, 90) с дискретом 1 пиксель, поворачивая рисунок на каждом шаге на 1о против часовой стрелки.

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

Program Povorot;

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; {угол поворота в радианах}

y:integer; {угол поворота в градусах}

i:byte; {переменная цикла}

sx, sy:integer; {величина сдвига изображения по осям X и Y в локальной системе координат}

ns:byte; {номер графической страницы}

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

begin

GraphDriver:=3;

GraphMode:=1;

InitGraph(GraphDriver, GraphMode, '');

SetBkColor(9); {установка цвета фона изображения}

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

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

dy:=300;

y:=0; {начальная величина угла поворота в градусах}

sy:=0; {начальная величина сдвига изображения по оси Y в локальной системе координат}

ns:=0; {номер активной графической страницы}

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

y11:=10;

x12:=20;

y12:=110;

x21:=70;

y21:=10;

x22:=70;

y22:=110;

for sx:=0 to 80 do {цикл по величине сдвига изображения по оси X относительно локальной системы координат}

begin

if ns=0 then {смена активной и видимой графических страниц}

begin

SetActivePage(0);

SetVisualPage(1)

end

else

begin

SetActivePage(1);

SetVisualPage(0)

end;

ClearDevice; {очистка активной страницы}

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

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

SetLineStyle(0, 0, 3); {установка толщины линий в исходном положении}

{отображение линий в исходном положении}

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));

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

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

{отображение перемещаемых линий}

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

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

y:=y+1; {изменение величины угла поворота в градусах}

sy:=sy+1; {изменение величины сдвига по оси Y относительно локальной системы координат }

if ns=0 then {смена номера активной графической страницы}

ns:=1

else

ns:=0;

Delay(500); {задержка изображения на каждом шаге перемещения}

end;

Readln; {остановка изображения до нажатия любой клавиши}

Closegraph; {выход из графического режима}

end.

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





Дата публикования: 2015-02-20; Прочитано: 220 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...