русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Построение заполненных областей изображения


Дата добавления: 2014-02-04; просмотров: 799; Нарушение авторских прав


Многоугольники можно рисовать самыми различными способами, например с помощью процедур 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 {Построение окружностей}

SetColor(radius+4);

Circle(150,150,Radius*25);

Inc(I); If I=4 Then I:=0;

End;

ReadLn;

ClearDevice; SetBkColor(1); SetColor(5);

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

Ellipse(130,130,0,360,30,50); {Построение эллипса}

ReadLn;

ClearDevice; SetColor(4);

Ellipse(130,130,0,180,100,70); {построение эллиптической дуги}

ReadLn;

ClearDevice; K:=4;

For Radius:=1 to 5 Do Begin

SetColor(K);

Arc(300,100,0,90,Radius*20); {построение дуги}

Inc(K);

End;

ReadLn;

ClearDevice; Width:=20; SetColor(1); SetBkColor(11);

For I:=1 to 5 Do Begin

SetFillStyle(7, I+4); {Определение стиля заполнения}

Bar(I*Width, I*20, Succ(I)*Width, 200); {Построение прямоугольников}

End;

SetFillStyle(5,12);

Bar(150,150,250,250);

ReadLn;

SetFillStyle(8,4); {Построение параллелепипеда с верхней плоскостью}

ClearDevice;

Y1:=100; Y2:=200; X1:=230; X2:=300;

SetLineStyle(3,0,3); {Определение стиля линии}

Bar3d(x1,y1,x2,y2,10,TopOn);

ReadLn;

ClearDevice; {Построение параллелепипеда без верхней плоскости}

SetLineStyle(0,0,1); SetFillStyle(11,1);

Bar3d(X1,Y1,X2,Y2,10,TopOff);

ReadLn;

{Пользовательский шаблон заполнения}

ClearDevice; SetColor(6);

SetLineStyle(0,0,3); { Стиль линии}

pattern[1]:=31; pattern[2]:=62; {заполнение массива}

pattern[3]:=124; pattern[4]:=248;

pattern[5]:=124; pattern[6]:=62;

pattern[7]:=31; pattern[8]:=0;

SetFillPattern(pattern,12); {Задание шаблона пользователя}

Bar(10,10,GetMaxX div 2,GetMaxY div 2);

Rectangle(10,10,GetMaxX div 2, GetMaxY div 2);

ReadLn;

{Построение закрашенного сектора эллипса}

ClearDevice; SetBkColor(3); SetColor(4);

SetFillStyle(7,14);

Sector(100,100,0,90,50,70);

ReadLn;

{Построение закрашенного сектора круга}

ClearDevice; SetFillStyle(1,14);

PieSlice(150,150,90,360,100);

ReadLn;

{Построение эллипса, заполненного текущим цветом}

ClearDevice;

SetFillStyle(6,13); SetLineStyle(3,0,1);

FillEllipse(200,200,50,100);

ReadLn;

{Построение закрашенного многоугольника}

ClearDevice; Randomize;

SetLineStyle(0,0,1); SetFillStyle(11,1);

{Определение случайных координат вершин}

For I:=1 To 5 Do Begin

points[i].X:=random(getmaxX); points[i].y:=random(getmaxY);

End;

points[6].x:=points[1].y; points[6].y:=points[1].y;

FillPoly(6,points);

ReadLn;

CloseGraph;

End.



<== предыдущая лекция | следующая лекция ==>
Построение прямоугольников | Использование стека


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.365 сек.