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

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

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; просмотров: 555. Нарушение авторских прав; Мы поможем в написании вашей работы!




Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...


Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...


Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...


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

Решение Постоянные издержки (FC) не зависят от изменения объёма производства, существуют постоянно...

ТРАНСПОРТНАЯ ИММОБИЛИЗАЦИЯ   Под транспортной иммобилизацией понимают мероприятия, направленные на обеспечение покоя в поврежденном участке тела и близлежащих к нему суставах на период перевозки пострадавшего в лечебное учреждение...

Кишечный шов (Ламбера, Альберта, Шмидена, Матешука) Кишечный шов– это способ соединения кишечной стенки. В основе кишечного шва лежит принцип футлярного строения кишечной стенки...

Метод Фольгарда (роданометрия или тиоцианатометрия) Метод Фольгарда основан на применении в качестве осадителя титрованного раствора, содержащего роданид-ионы SCN...

Потенциометрия. Потенциометрическое определение рН растворов Потенциометрия - это электрохимический метод иссле­дования и анализа веществ, основанный на зависимости равновесного электродного потенциала Е от активности (концентрации) определяемого вещества в исследуемом рас­творе...

Гальванического элемента При контакте двух любых фаз на границе их раздела возникает двойной электрический слой (ДЭС), состоящий из равных по величине, но противоположных по знаку электрических зарядов...

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