Отображение точки
Какие бы изображения не выводились на экран, все они построены из точек. Процедура PutPixel(X,Y:integer; Color:word); отображает точку на экране, где X и Y — экранные координаты точки. Color - её цвет.
Приведем пример программы, при выполнении которой создается интересный визуальный эффект путем заполнения экрана множеством точек различных цветов.
Пример.
Uses Crt, Graph;
Var Driver,Mode: integer; Color: word;
X,Y:word; Procedure GrInit;
Begin
Driver:= Detect; {автораспознанание драйвера} InitGraph(Driver,Mode,'');
If GraphResult<>0 then Begin
Writeln ('Ошибка инициализации!');
Writeln ('Работа программы прервана');
Halt (1) {остановить выполнение программы с кодом завершения — 1}
End
End;
Begin
GrInit;
Color: =0; Randomize; Repeat
{выберем случайным образом координаты точки}
X: = Random(GetMaxX);
Y: = Random(GetMaxY);
PutPixel(X,Y,Color), {вывод точки}
Inc(Color); {изменение цвета}
{проверим, не превышает ли значение цвета максимального значения, которое определяет функция GetMaxColor}
If Color = GetMaxColor Then Color: =0;
Until KeyPressed; {повторять до нажатия любой клавиши)
ClearDevice;
|
|
{CloseGraph}
End.
Отображение отрезков прямых линий
Процедура Line(Xl,Yl,X2,Y2: integer); выводит на экран отрезок прямой линии. Здесь (X1,Y1)—координаты начальной точки, a (X2,Y2) — координаты конечной точки отрезка.
Для построения отрезков можно применять также следующие процедуры:
LineTo(X,Y); — проводит отрезок из текущей точки до точки с координатами (X,Y);
LineRel(dX,dY|; — проводит отрезок из текущей точки до точки, удаленной от нее на расстояние (dX,dY). Линии можно вычерчивать самых различных стилей: тонкие, широкие, штриховые, пунктирные и т. д. Процедура SetLineStyle(<тип линии>:word;<yзop(maблон)>: word;(толщина линии):word); производит установку стиля. Константы типа линий и их толщины приведены в таблице.
Константа | Характеристика линий | |
SolidLn | 0 | Сплошная линия |
DottedLn | 1 | Точечная линия |
CenterLn | 2 | Штрихпунктирная линии |
DashedLn | 3 | Пунктирная линия |
UserBitLn | 4 | Тип линии, определяемый пользователем |
NormWidth | 1 | Нормальная толщина линий |
ThickWidth | 3 | Жирная линия |
Если тип линии не равен UserBitLn, то параметр "узор(шаблон)" не используется и обычно задается равным нулю, например SetLineStyle(0,0,3) — стиль линии — сплошная, жирная.
Построение прямоугольников
Процедура Rectangle(Xl,Yl,X2,Y2: integer); строит изображение прямоугольника на плоскости. Здесь XI,Y1— координаты левого верхнего угла, X2,Y2 — координаты правого нижнего угла прямоугольника. При этом используется текущий цвет (SetColOf) и стиль линии (SetLineStyle). Область внутри прямоугольника не закрашена и совпадает по цвету с фоном.
Процедура Bar(Xl,Yl,X2,Y2:integer); позволяет строить более эффектные прямоугольники. Она рисует прямоугольник, внутренняя область которого залита по текущему шаблону. Обычно используется в деловой графике для построения столбиковых диаграмм, а также для "закраски" графического окна, чтобы фон графического окна не сливался с общим фоном экрана.
|
|
Рассмотрим, как производить «заливку» замкнутых областей экрана с помощью различных узоров, т. е. как выбрать узор (шаблон) и цвет заполнения фигуры. Комбинацию узор-цвет принято называть стилем заполнения.
Процедура SetFillStyle(<шаблон>:word;<цвет>:word); устанавливает шаблон и цвет заполнения замкнутой фигуры.
Константы шаблонов закраски приведены в таблице.
Константа | Значение | Описание узора |
EmptyFill | 0 | Закраска области фоновым цветом |
SolidFill | 1 | Сплошная закраска области текущим цветом |
LineFill | 2 | Закраска линиями — |
LtSlashFill | 3 | Закраска линиями /// |
SlashFill | 4 | Закраска жирными линиями/// |
BkSlashFill | 5 | Закраска жирными линиями\\\ |
LtBkSlashFill | 6 | Закраска линиями /// |
HatchFill | 7 | Закраска редкой штриховкой |
XhalchFill | 8 | Закраска частой штриховкой (в обоих направлениях) |
InterleaveFill | 9 | Закраска прерывистой линией |
WideDotFill | 10 | Закраска линией из редких точек |
CloseDotFill | 11 | Закраска линией из частых точек |
UserFill | 12 | Закраска, определяемая программистом |
Процедура FloodFill(X,Y:integer; Border: word); заполняет ограниченную область текущим цветом и стилем заполнения (SetFillStyle). Граница закрашиваемой области высвечивается цветом, заданным в Border.
Если точка (X,Y) находится внутри области, то эта область закрашивается, если же она расположена вне области, то заполняется внешняя часть области.
Построение дуг, эллипсов и окружностей
Процедура Arc(X,Y:integer; al, a2,R: word); строит дугу. Здесь (X,Y)—центр окружности дуги, al, a2 — начальный и конечный углы, отсчитываемые от горизонтальной оси против часовой стрелки, R—радиус. Если al=0o, а а2=360°, то вычерчивается полная окружность.
Процедура Ellipse (X,Y: integer; al,a2,Rx,Ry: word); предназначена для построения эллиптических дуг. Здесь (X,Y)—центр эллипса, al,a2 — начальный и конечный углы, отсчитываемые от горизонтальной оси против часовой стрелки, Rx и Ry — горизонтальная и вертикальная полуоси. Если al=0°, а а2 = 36О, то вычерчивается ПОЛНЫЙ ЭЛЛИПС.
Процедура FillEllipse(X,Y: integer; Rx,Ry: word); строит полный закрашенный эллипс.
Процедура Circle(X,Y: integer; R: word); выводит на экран изображение окружности с центром (X,Y) и радиусом R. Окружность рисуется цветом, заданным SetColor.
Процедура PieSlice(X,Y: integer; al, n2,R: word); выводит на экран изображение закрашенного сектора круга, используя и качестве центра круга точку (X,Y), начальный угол al, конечный угол a2 и радиус R. Контур сектора высвечивается текущим цветом. При заполнении сектора используются шаблон и цвет, установленные процедурой SetFillStyle. Если al =0°, а а2=360°, то на экран выводится закрашенная окружность.
Процедура Sector(X,Y: integer; al,a2,Rx;Ry: word); строит закрашенный сектор эллипса.