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



Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...

Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

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

Классификация потерь населения в очагах поражения в военное время Ядерное, химическое и бактериологическое (биологическое) оружие является оружием массового поражения...

Факторы, влияющие на степень электролитической диссоциации Степень диссоциации зависит от природы электролита и растворителя, концентрации раствора, температуры, присутствия одноименного иона и других факторов...

Йодометрия. Характеристика метода Метод йодометрии основан на ОВ-реакциях, связанных с превращением I2 в ионы I- и обратно...

Вопрос 1. Коллективные средства защиты: вентиляция, освещение, защита от шума и вибрации Коллективные средства защиты: вентиляция, освещение, защита от шума и вибрации К коллективным средствам защиты относятся: вентиляция, отопление, освещение, защита от шума и вибрации...

Задержки и неисправности пистолета Макарова 1.Что может произойти при стрельбе из пистолета, если загрязнятся пазы на рамке...

Вопрос. Отличие деятельности человека от поведения животных главные отличия деятельности человека от активности животных сводятся к следующему: 1...

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