Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции - Паскаль-переплет.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
626 Кб
Скачать
☆

Процедуры создания графических примитивов

1. Текущий указатель.

При построении изображения иногда надо указать точку начала вывода. В текстовом режимах эту точку указывает курсор, который присутствует на экране (его можно убрать). В графическом режимах видимого курсора нет, но есть невидимый текущий указатель. Для перемещения текущего указателя по экрану дисплея служит процедура MoveTo(x,y) - перемешает указатель в точку с координатами (x,y).

MoveRel(dx, dy) - перемещает указатель на dx точек по горизонтали и dy точек по вертикали от предыдущей позиции.

Примеры

  1. ...........

MoveTo(200,100);

MoveRel(5,10); {указатель переместится в точку (205,110)}

...........

Чтобы определить максимальное значение координат X Y для установленного видеорежима, используют функции

GetMaxX : integer; максимум по Х

GetMaxy : integer; максимум по Y

Установить указатель в центр экрана.

.........

var Xcentr, Ycentr : integer;

..........

begin

...........

Xcentr:=GetMaxX div 2;

Ycentr:=GetMaxy div 2;

MoveTo(Xcentr, Ycentr);

.............

2. Вывод точки

PutPixel(x,y : integer; <цвет точки>);

где x,y координаты точки.

3. Вывод отрезка

Line(x1,y1,x2,y2);

(x1,y1) - координаты начала отрезка

(x2,y2) - координаты конца отрезка

!!! Обратите внимание на то, что в процедуре не задается цвет. В этом и аналогичных случаях цвет определяется процедурой SetColor().

LineTo(x,y) - строит отрезок из точки текущего положения указателя в точку с координатами (x,y).

LineRel(dx,dy) - строит отрезок из точки текущего положения указателя в точку с координатами (x+dx, y+dy)

4. Построение прямоугольника

Rectangle(x1,y1,x2,y2:integer);

Bar(x1,y1,x2,y2:integer) - рисует прямоугольник и закрашивает его цветом и стилем, определенным в процедуре SetFillStyle().

5. Построение дуг, окружностей, эллипсов.

Circle(x,y,<радиус> : word); - окружность указанного радиуса

Ellipse(x,y:integer; <нач_угол>,<кон_угол> :word; xR,yR : word) - построение эллиптических дуг.

X,Y - координаты центра,

xR, yR - длина горизонтальной и вертикальной полуосей в пикселах.

Угол отсчитывается против часовой стрелки и указывается в градусах. Дуга эллипса вычерчивается от заданного начального угла до конечного угла. Если значение начального угла 0, а конечного 360 - будет построен полный эллипс.

6. Построение закрашенного эллипса:

FillEllipse(x,y:integer; xR,yR);

X,Y - координаты центра,

xR, yR - длина горизонтальной и вертикальной полуосей в пикселах.

Стиль заполнения области внутри эллипса устанавливается процедурой SetFillStyle(), а самого эллипса - SetColor().

7. Заполнение внутренней или внешней области замкнутой фигуры.

FloodFill(x,y:integer; <цвет границы области>);

Стиль задан SetFillStyle()

X,Y - координаты точки внутри (или вне) замкнутой области.

Задача. Построить в центре экрана синий прямоугольник, закрасив его линиями вида \\ темно-серого цвета. Фон экрана сделать белым.

Program graph1;

uses Graph;

var Driver, Mode : integer;

begin

Driver:=Detect; {инициализация графического}

InitGraph(Driver, Mode,’’) { режима}

SetBkColor(15); { установка цвета фона - белый}

SetColor(1); {установка текущего цвета - синего}

Cleardevice; {очистка экрана установленным цветом фона}

SetFillStyle(5,8); {установка стиля заполнения}

Rectangle(290,290, GetMaxX-290, GetMaxy-290); {прямоугольник}

FloodFill(301,230,1); {заполнение прямоугольника выбранным

стилем}

ReadLn;

CloseGraph;

end.

Задача 2. Построить график y=sinx по оси y в диапазоне -100,100 y=100*sinx, 0<x<2pi, длина шага Dx=pi/100.

Program sinus;

uses crt, graph;

var gt, gr : integer;

xm,ym,i : integer;

dx,x1,y1,x2,y2:real;

begin

gt:=detect; initgraph(gt,gr,’’);

xm:=getmaxx div 2;

ym:=getmaxy div 2;

setcolor(3);

line(0,ym-100,0,yn+100); line(0,ym.getmaxx,ym); {построение осей}

outtextxy(100,ym+50,’pi’); {вывод текста рядом с осями}

moveto(0,ym);

dx:=oi/100;

x1:=0;

setcolor(5);

while x1<=200 do begin

y1:=100*sin(x1*dx);

x2:=x1+dx;

y2:=100*sin(x2*dx);

line(round(x1),ym+round(y1),round(x2), ym+round(y2));

x1:=x2;

y1:=y2

end;

readln;

closegraph;

end.