Многоугольники можно рисовать самыми различными способами, например с помощью процедур Line или LineTo. В Турбо Паскале имеется процедура DrawPoly, которая позволяет строить любые многоугольники с помощью линий текущего цвета, стиля и толщины.
Построение многоугольников
Установка стиля заполнения
В модуль Graph включен ряд стандартных шаблонов различных узоров для заполнения внутренних и внешних областей различных геометрических фигур. Узор может быть окрашен в допустимые для установленной палитры цвета. Комбинацию узор-цвет принято называть стилем заполнения.
SetFillStyle(Pattern,Color)
Pattern – значение шаблоно различных узоров
Color – цвет
Значение
(Pattern)
Описание узора
Сплошной цветом фона
Сплошной текущим цветом
Типа ---
Типа // нормальной толщины
Типа // удвоенной толщины
Типа \\ удвоенной толщины
Типа \\ нормальной толщины
Заполнение клеткой
Заполнение косой редкой клеткой
Заполнение косой частой клеткой
Заполнение редкими точками
Заполнение частыми точками
Определяется пользователем
Пример. Построение прямоугольников, параллелепипеда без верхней плоскости и с верхней плоскостью с различным стилем заполнения.
USES Graph,Crt;
VAR
Gd,Gm:Integer;
X1,X2,Y1,Y2:Word;
Begin
Gd:=Detect;
{Инициализация графического режима}
InitGraph(Gd,Gm,'C:\TP7\BGI');
{Обработка ошибки инициализации}
IF GraphResult<>0 THEN Begin
WriteLn(‘Ошибка инициализации’);
HALT(1);
End;
TextBackGround(1);
{определяются координаты прямоугольника}
X1:=GetMaxX DIV 4;
Y1:=GetMaxY DIV 4;
X2:=2*GetMaxX DIV 3;
Y2:=3*GetMaxY DIV 4;
ClearDevice; {чистка экрана}
{установка стиля заполнения}
SetFillStyle(7,4);
Bar(X1,Y1,X2,Y2); {обычный прямоугольник}
ReadLn;
ClearDevice; {чистка экрана}
{параллелепипед без верхней плоскости}
SetFillStyle(1,2);
Bar3D(X1,Y1,X2,Y2,10,TopOff);
ReadLn;
ClearDevice; {чистка экрана}
{параллелепипед с верхней плоскостью}
SetFillStyle(10,6);
Bar3D(X1,Y1,X2,Y2,10,TopOn);
ReadLn;
CloseGraph;
End.
Формат:
DrawPoly(NumPoints,PolyPoints);
DrawPoly позволяет отображать на экране любую ломаную, заданную совокупность координат некоторого множества точек.
Это может быть как сложная геометрическая фигура, так и график математической функции, заданной в табличном виде.
NumPoints – это количество точек ломаной.
PolyPoints – набор записей, каждая из которых состоит из двух полей, содержащих координаты X и Y очередной точки.
Пример. Построение многоугольников с пятью вершинами. Координаты вершин случайные.
USES Graph,Crt;
VAR
Gd,Gm:Integer;
I:Byte;
Ch:Char;
Points:Array[1..6] Of PointType; {Массив вершин}
Begin
Gd:=Detect;
{Инициализация графического режима}
InitGraph(Gd,Gm,'C:\TP7\BGI');
{Обработка ошибки инициализации}
IF GraphResult<>0 THEN Begin
WriteLn(‘Ошибка инициализации’);
HALT(1);
End;
Randomize;
Repeat
ClearDevice;
{определение случайных координат вершин}
For I:=1 To % Do Begin
Points[I].X:=Random(GetMaxX);
Points[I].Y:=Random(GetMaxY);
End;
{Связь координат первой и последней вершин}
Points[6].X:=Points[1].X;
Points[6].Y:=Points[1].Y;
DrawPoly(6,Points); {построение многоугольника}
Until Ch=#27; {пока не нажата клавиша Esc}
CloseGraph;
End.
Построение дуг, эллипсов и окружностей
Изображение окружности
Circle(X, Y, Radius);
X, Y – координаты центра окружности
Radius – радиус окружности
Изображение дуг
Arc(X, Y, StAngle, EndAngle, Radius);
X, Y – центр окружности дуги.
StAngle, EndAngle – начальный и конечный углы, отсчитываемые от горизонтальной оси против часовой стрелки.
Radius – радиус.
Если StAngle=0 и EndAngle=359, то вычерчивается полная окружность.
Построение эллиптических дуг
Ellipse(X, Y, StAngle, EndAngle, XR, YR)
XR, YR – задают горизонтальную и вертикальную оси.
Если StAngle=0 и EndAngle=359, то вычерчивается полный эллипс.
11.13.1 Построение заполненного сектора эллипса
Sector(X,Y, StAngle, EndAngle, XR, YR)
X, Y – центр окружности дуги.
StAngle, EndAngle – начальный и конечный углы, отсчитываемые от горизонтальной оси против часовой стрелки.
Radius – радиус.
Эллипс (сектор эллипса) будет залит цветом по текущему шаблону.
Построение заполненного сектора круга
PieSlice(X,Y, StAngle, EndAngle, Radius)
Сектор круга (круг, если StAngle=0 и EndAngle=359) будет заполнен текущим узором.
11.13.2 Построение заполненного эллипса
FillEllipse(X, Y, XR, YR)
XR, YR – задают горизонтальную и вертикальную оси.
X, Y – координаты центра эллипса
11.13.3 Построение заполненных сложных геометрических фигур
FillPoly(NumPoints, PolyPoints)
Эта процедура по своему действию очень похожа на процедуру DrawPoly и имеет такие же параметры. Различие лишь в том, что многоугольник, который рисуется процедурой FillPoly, всегда замкнутый, а область, ограниченная контуром полученной фигуры, закрашивается.
Пример. Построение геометрических фигур.
Uses Graph, Crt;
VAR
GD,GM:integer;
Radius, I, Width, K:Integer;
Y0, Y1, Y2, X1, X2:integer;
Pattern:FillPatternType;
Points:Array[1..6] Of PointType;
BEGIN
GD:=vga; GM:=1;
Initgraph(gd,gm,'C:\tp7\bgi');
IF GraphResult<>0 then Halt(1);
SetBkColor(0); SetColor(2); {Цвет фона и изображения}
I:=0;
For Radius:=1 to 5 Do Begin {Построение окружностей}