Студопедия — Program DemoDrawPoly;
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Program DemoDrawPoly;






uses

Graph, Crt;

const

N=7; { Количество вершин многоугольника +1}

MultiRect: array[1..N] of PointType = {Координаты вершин}

((X: 200; Y: 100), {Координаты первой вершины и }

(X: 285; Y: 155),

(X: 285; Y: 255),

(X: 200; Y: 300),

(X: 115; Y: 255),

(X: 115; Y: 155),

(X: 200; Y: 100)); {последней (замыкающей) должны совпадать}

var

Gd, Gm, GrEr: Integer;

begin

Gd: = Detect;

InitGraph(Gd, Gm, ’d: \bp\bgi’);

GrEr: = GraphResult;

if GrEr = grOk then

begin

DrawPoly(N, MultiRect);

OutTextXY(50, 20, ’Нажмите любую клавишу...’);

Repeat Until KeyPressed;

CloseGraph;

end

else

begin

WriteLn(’Ошибка графики: ’, GrEr, ’. Нажмите Enter...’);

Readln;

end;

end.

 

Сведения о других примитивах можно найти в книгах по Турбо Паскалю или в справочной системе Турбо Паскаля.

 

Все фигуры, как отмечалось выше, рисуются текущим цветом и типом линии. Цвет линии задается из имеющегося активного набора цветов – палитры.

 

Пример. Написать программу построения графика заданной функции Y=f(X) для аргумента X, изменяющегося от xn до xk. Для определенности будем считать, что Y=sin(x), xn = –2π, xk = 2π.

Общие соображения по написанию программы для построения графиков приводились в п. 5.1.4. При построении графика должны быть определены масштабы – коэффициенты, с помощью которых натурные величины (X, Y) будут переводиться в графические координаты (xG, yG). В общем случае пределы изменения натурных величин: аргумента (xn, xk) и функции (Ymin, Ymax) должны быть отображены на выбранные пределы изменения графических координат:

xGnx графическое начальное,

xGkx графическое конечное,

yGny графическое начальное,

yGk – y графическое конечное.

С учетом сказанного, масштабы можно определить по формулам:

mx: =(xGk-xGn)/(xk-xn); { Масштаб по X }

my: =(yGk-yGn)/(ymax-ymin); { Масштаб по Y }

Максимальное и минимальное значения функции (хотя бы приблизительные, лучше с запасом в большую сторону) должны быть заданы пользователем. Для перехода к графическим координатам получим следующие соотношения:

xG: =Round(xGn+(x-xn)*mx);

yG: =Round(yGn+(ymax-y)*my);

Для построения графика воспользуемся процедурой LineTo, которая будет проводить линию от точки к точке.

Программа построения графика может быть такой.

 

Program PlotGrafik;

uses

Crt, Graph;

Const

xGn=20; { Константы, определяющие }

yGn=50; { область экрана, }

xGk=600; { в которую будет }

yGk=470; { выводиться график }

xn=-2*pi/2; { Начальное и }

xk=2*pi/2; { конечное значение аргумента }

ymin=-1; { Предполагаемые минимальное и }

ymax=1; { максимальное значения функции }

kT=150; { Количество точек графика }

Var

grDr, grMd, grEr: integer;

x, y, Dx: real;

xG, yG: integer;

mx, my: real; { Масштабы по X и Y }

 

Function f(x: real): Real;

begin

f: =sin(x); {Функция, для которой строится график}

end;

Begin

grDr: =Detect;

InitGraph(GrDr, GrMd, ’D: \bp\BGI’);

GrEr: =GraphResult;

if GrEr=GrOk then { Графический режим удачно открыт}

begin

SetBkColor(Blue);

ClearDevice; {Очистим экран, сделаем фон голубым}

Dx: =(xk -xn)/(kT-1); { Шаг изменения аргумента }

mx: =(xGk-xGn)/(xk-xn); { Масштаб по X }

my: =(yGk-yGn)/(ymax-ymin); { Масштаб по Y }

SetLineStyle(0, 0, 1); { Одинарная линия }

SetColor(Red); { Оси нарисуем красным }

Line(Round(xgn+(0-xn)*mx), ygn-20,

Round(xgn+(0-xn)*mx), ygk); {Ось Y, на ней X=0}

Line(xgn, Round(ygn+(ymax-0)*my),

xgk+20, Round(ygn+(ymax-y)*my)); {Ось X, на ней Y=0}

{Изображение стрелки на конце оси X и надписи X}

MoveTo(xgk+20, Round(ygn+(ymax-y)*my));

LineRel(-8, 4);

MoveTo(xgk+20, Round(ygn+(ymax-y)*my));

LineRel(-8, -4);

MoveRel(0, -25);

SetTextStyle(1, 0, 1); {Шрифт для обозначения осей}

OutText(’X’);

{Рисование стрелки на конце оси Y и надписи Y}

MoveTo(Round(xgn+(0-xn)*mx), ygn-20);

LineRel(-4, 8);

MoveTo(Round(xgn+(0-xn)*mx), ygn-20);

LineRel(4, 8);

MoveRel(0, -15);

OutText(’Y’);

SetColor(white); { Белый цвет для линии графика }

x: =xn; { Текущее значение для X }

y: =F(x); { Значение функции для этого X }

xG: =Round(xgn+(x-xn)*mx); {Графическая коорд. по X}

yG: =Round(ygn+(ymax-y)*my); {Графическая коорд. по Y}

MoveTo(xg, yg); { Курсор в эту точку экрана }

While x< =xk do {Цикл для всех значений аргумента}

begin

x: =x+dx;

y: =f(x);

xG: =Round(xgn+(x-xn)*mx);

yG: =Round(ygn+(ymax-y)*my);

LineTo(xG, yG);

end;

SetTextStyle(0, 0, 1); { Шрифт для вывода текста }

OutTextXY(5, 5, ’График функции Y=Sin(X)’);

OutTextXY(5, 20, ’Нажмите любую клавишу...’);

Repeat Until KeyPressed

CloseGraph; { Закрываем графический режим }

end

else

begin

WriteLn(’Ошибка графики ’, GrEr, ’ ’, GraphErrorMsg(GrEr));

WriteLn(’Нажмите Enter...’);

ReadLn;

end;

End.

 

Закраска замкнутой области выполняется процедурами:

5) SetFillStyle(Тип_закраски, Цвет: Word); – устанавливает тип (стиль) закраски и ее цвет.

 

В Турбо Паскале определено большое количество типов закраски, которые можно задавать либо с использованием предопределенных имен констант, либо их значений. Приведем некоторые из них:

0 – заполнение области фоновым цветом;

1 – сплошное заполнение области заданным цветом;

2 – заполнение области горизонтальными линиями;

3 – заполнение области наклонными линиями;

4 – заполнение области толстыми наклонными линиями

.......

11 – заполнение области частыми точками;

12 – заполнение области стилем, определяемым пользователем.

Цвет - цвет закраски (из палитры).

 

Пример. SetFillStyle(4, 1);

 

6) FloodFill(x, y, Цвет_границы: Word); – закрашивает ограниченную область, используя текущий образец закраски.

Точка (x, y) является внутренней точкой закрашиваемой области. Для заполнения области, ограниченной цветом, определяемым параметром Цвет_границы, используется текущий образец закраски.

Например, программа, которая рисует концентрические окружности с координатами центра (150, 100) всеми 15-ю цветами (MaxColors) и закрашивает получившиеся кольца всеми 11-ю типами заливки и цветом, отличным от цвета контура будет иметь вид.







Дата добавления: 2014-12-06; просмотров: 530. Нарушение авторских прав; Мы поможем в написании вашей работы!



Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

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

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

Устройство рабочих органов мясорубки Независимо от марки мясорубки и её технических характеристик, все они имеют принципиально одинаковые устройства...

Ведение учета результатов боевой подготовки в роте и во взводе Содержание журнала учета боевой подготовки во взводе. Учет результатов боевой подготовки - есть отражение количественных и качественных показателей выполнения планов подготовки соединений...

Сравнительно-исторический метод в языкознании сравнительно-исторический метод в языкознании является одним из основных и представляет собой совокупность приёмов...

Приготовление дезинфицирующего рабочего раствора хлорамина Задача: рассчитать необходимое количество порошка хлорамина для приготовления 5-ти литров 3% раствора...

Дезинфекция предметов ухода, инструментов однократного и многократного использования   Дезинфекция изделий медицинского назначения проводится с целью уничтожения патогенных и условно-патогенных микроорганизмов - вирусов (в т...

Машины и механизмы для нарезки овощей В зависимости от назначения овощерезательные машины подразделяются на две группы: машины для нарезки сырых и вареных овощей...

Studopedia.info - Студопедия - 2014-2024 год . (0.01 сек.) русская версия | украинская версия