Модуль GraphABC

Графический режим работы модуля GraphABC. Рисование линий, прямоугольников и окружностей средствами данного модуля. Построение графиков функций. Пример программы, которая рисует архимедову спираль и окружность в полярных координатах. Работа с цветом.

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 15.06.2013
Размер файла 668,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Модуль GraphABC

Батракова Л.В.

Графический режим работы. Модуль GraphAbc

При работе в графическом режиме изображение на экране строится не из символов, а из точек - пикселов. Каждый пиксель (точка) имеет две координаты: х и у (рис.3.4).

Геометрические размеры пикселя определяются разрешением монитора. Разрешение монитора задается в виде x x y, где x - количество возможных пикселов на экране по горизонтали, а y - количество пикселов по вертикали. Например, известны следующие разрешения мониторов:

? 320х200;

? 640x480;

? 800x600;

? 1024x768;

? 1280x1024 - и т.д.

Даже при самом плохом разрешении экрана изображение в графическом режиме формируется с помощью 64000 графических элементов. Из такого количества «строительных кирпичиков» можно построить хорошую картинку.

Возможности стандартной графической библиотеки

Любая графическая картинка формируется из простых геометрических фигур. Это точки, отрезки (линии), прямоугольники, окружности и т.д. Из геометрии известно, что положение геометрического объекта и его форма задаются координатами его точек. Для того чтобы запрограммировать вывод картинки, надо научиться задавать координаты геометрических фигур, из которых она состоит.

Графические координаты задают положение точки на экране монитора. Поскольку минимальным элементом, к которому имеет доступ программист, является пиксель, в качестве графических координат используют порядковые номера пикселов. Допустимый диапазон изменения графических координат составляет [0,x-1] для х - координаты и [0,y-1] для у - координаты. Началом отсчета является левый верхний угол экрана. Значения х - координаты отсчитывается слева направо, а значения у - координаты - сверху вниз.

Важно помнить:

1. Графические координаты принимают только целочисленные значения.

2. Графические координаты принимают значения, ограниченные как снизу (нулевым значением), так и сверху (значением разрешения экрана монитора).

3. Графическая координата у отсчитывается сверху вниз.

Рисование различных геометрических фигур осуществляется с помощью специальных стандартных команд (процедур). Команды для работы в графическом режиме хранятся в библиотечном модуле GraphAbc. Модуль GraphAbc представляет собой простую графическую библиотеку и предназначен для создания графических программ. Поэтому во всех программах, которые работают в графическом режиме, ее необходимо подключать в разделе описаний с помощью зарезервированного слова Uses (подключить). Рисование осуществляется в специальном графическом окне. Возможность рисовать одновременно в нескольких окнах отсутствует. Рисовать можно с помощью пера и кисти. В модуле GraphAbc с помощью команды setwindowsize(X,Y) можно задавать размеры графического окна. По умолчанию графическое окно будет принимать размеры экрана компьютера.

Пример 1. Демонстрация подключения модуля GraphAbc

program tochka;

uses graphabc; {подключение модуля GraphAbc}

begin

setwindowsize(640,480); {устанавливает размеры

графического окна}

setpixel(100,120,clBlack); {устанавливает черный цвет

пера и рисует точку с координатами (100,120)}

end.

В общем виде эта команда выглядит так:

setpixel(x:integer,y:integer,c:color) - рисует пиксел (точку) с координатами (х,у) цветом с.

Стандартные цвета с задаются символическими константами:

clBlack - черный

clPurple - фиолетовый

clWhite - белый

clMaroon - темно-красный

clRed - красный

clNavy - темно-синий

clGreen - зеленый

clBrown - коричневый

clBlue - синий

clSkyBlue - голубой

clYellow - желтый

clCream - кремовый

clAqua - бирюзовый

clOlive - оливковый

clFuchsia - сиреневый

clTeal - сине-зеленый

clGray - темно-серый

clLime - ярко-зеленый

clMoneyGreen - цвет зеленых денег

clLtGray - светло-серый

clDkGray - темно-серый

clMedGray - серый

clSilver - серебряный

Рисование линий средствами модуля GraphAbc

Одними точками возможности модуля GraphAbc не ограничиваются. Он умеет также рисовать геометрические фигуры - линии, прямоугольники и окружности.

Программа рисования отрезка, соединяющего две точки с координатами (120,150) и (150,80) красным цветом пера, может выглядеть так:

Пример 2. Демонстрация рисования линии

program Linii;

uses graphabc;

begin

setwindowsize(640,480);

setpencolor(clred); {устанавливает красный цвет пера}

line(120,150,300,100); {рисует отрезок от точки с

координатами(120,150)до точки

с координатами с координатами (300,100)}

end.

Вид на экране монитора после выполнения данной программы:

графический модуль graphabc

Рис. 3.5

Из примера 2 видно, что линии можно рисовать с помощью команды line, которая имеет общий вид:

Line(x1,y1,x2,y2), где (x1,y1) и (x2,y2) - координаты точек отрезка, которого соединяет линия.

А теперь нарисуем треугольник, у которого все стороны разного цвета, с определенной толщиной (шириной) линии.

Пример 3. Демонстрация рисования линий разным цветом пера

program treugolnik;

uses graphabc;

begin

setwindowsize(640,480);

setpenwidth(5); {устанавливает ширину текущего пера. В

скобках указывается количество пикселей,

образующих ширину линии}

setpencolor(clred); {устанавливает красный цвет пера}

line(100,200,170,70); {рисует отрезок от точки с

координатами (100,200)до точки с координатами с координатами (170,70)}

setpencolor(clGreen); {устанавливает зеленый цвет пера}

line(170,70,250,200); {рисует отрезок от точки(170,70)до

точки(250,200)}

setpencolor(clBlue); {устанавливает синий цвет пера}

line(250,200,100,200);{рисует отрезок от точки(250,200)

до точки(100,200)}

{результат - треугольник со сторонами разных цветов}

end.

После выполнения программы на экране монитора появится графическое окно со следующим рисунком:

Важно помнить:

1. Рисуя линии, можно задавать ее размер (координатами ее концов), цвет, ширину (толщину) и стиль.

2. Для задания стиля линии в модуле GraphAbc существует процедура SetPenStyle (Style), где Style - константы стилей пера (см. Приложение).

3. Линия может быть сплошной, пунктирной, штрихпунктирной, штриховой.

Замкнутые фигуры можно закрашивать.

Изменим нашу программу (пример 3) так, чтобы она рисовала закрашенный треугольник.

Пример 4. Демонстрация рисования замкнутых фигур с помощью линий и их закрашивание

Program treug_zakrash;

uses graphabc;

begin

setwindowsize(640,480);

clearwindow(clWhite); {очищает графическое окно белым

цветом}

setpenwidth(3); {устанавливает ширину текущего пера}

setpenstyle(pssolid); {устанавливает стиль линии -

сплошная линия}

setpencolor(clgreen); {устанавливает зеленый цвет пера}

line(100,200,170,70); {рисует линии зеленым цветом}

line(170,70,250,200);

line(250,200,100,200);

floodfill(440,120,clred); {Закрашивает треугольник

красным цветом}

end.

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

Важно помнить:

1. Закрашивать можно только замкнутые фигуры, контур которых нарисован одним цветом.

2. В процедуре заливки floodfill(х,у,c) указывается координата точки (х,у), которая обязательно должна попасть во внутреннюю область закрашиваемой фигуры.

Рисование прямоугольников и окружностей средствами модуля GraphAbc

Прямоугольники и окружности можно рисовать с помощью команд rectangle(x1,y1,x2,y2) и circle(x,y,r) соответственно (см. Приложение). Как это можно сделать, рассмотрим на примере программы, которая рисует прямоугольник и окружность.

Пример 5. Демонстрация рисования прямоугольника и окружности

program gemetry;

uses graphabc;

begin

setwindowsize(640,480);

setpencolor(clBlue); {устанавливает голубой цвет пера

для рисования контура прямоугольника}

setpenwidth(6); {устанавливает ширину пера}

rectangle(50,50,250,150);{рисует прямоугольник, заданный

координатами противоположных вершин}

setpencolor(clred); {устанавливает красный цвет пера

для рисования контура окружности}

circle(350,100,60); {рисует окружность с центром в точке

с координатами (350,100) и радиусом 60}

end.

Результат выполнения программы :

А теперь закрасим эти фигуры и подпишем их. В этом случае программа может выглядеть так:

Пример 6. Демонстрация закрашивания прямоугольника и окружности и их надписи

program gemetry3;

uses graphabc;

begin

setwindowsize(640,480);

clearwindow(clYellow); {устанавливает желтый цвет фона}

setpencolor(clteal); {устанавливает сине-зеленый цвет

пера}

setpenwidth(5); {устанавливает ширину линии}

setbrushcolor(clolive); {устанавливает оливковый цвет

кисти}

rectangle(100,100,300,200); {рисует закрашенный

оливковым цветом прямоугольник}

setbrushcolor(clblue); {устанавливает синий цвет кисти}

circle(400,150,50); {рисует закрашенный синим

цветом круг}

setfontstyle(fsbold); {устанавливает стиль шрифта}

setfontsize(15); {устанавливает размер шрифта}

setbrushcolor(clwhite);{устанавливает белый цвет кисти}

setfontcolor(clolive); {устанавливает оливковый цвет

шрифта}

textout(100,220,'Прямоугольник'); {делает надпись}

setfontcolor(clblue); {устанавливает синий цвет шрифта}

textout(380,220,'Круг'); {делает надпись}

end.

После выполнения программы графическое окно на экране монитора будет выглядеть так:

Из приведенного выше примера видно, что рисовать можно на «холсте» определенного цвета, который задается с помощью процедуры установки цвета графического окна clearwindow(color). Закрасить прямоугольник и круг можно, используя процедуру закраски кистью setbrushcolor (color) (см. Приложение).

С помощью процедур setfontcolor, setfontstyle, setfontsize, setbrushcolor, textout, общий вид которых приведен в «Приложении», рисунки можно подписать.

С помощью примитивов можно создавать любые картинки. Например, используя выше рассмотренные команды, можно создать такую картинку:

А программа, выполнив которую, получилась такая картинка, имеет

следующий вид:

program skvoreshnik;

uses graphabc;

begin setwindowsize(1280,1024);

clearwindow(clwhite); {устанавливает белый цвет фона}

setpencolor(clteal);{устанавливает сине-зеленый цвет пера}

setpenwidth(5); {устанавливает ширину линии}

rectangle(100,150,250,300); {рисует прямоугольник}

setbrushcolor(clyellow);{устанавливает желтый цвет кисти

для закраски круга}

circle(170,200,25);{рисует закрашенный желтым цветом круг}

floodfill(150,160,clBrown); {закрашивает коричневым

цветом прямоугольник - стену скворечника}

line (100,150,175,90); {эти линии рисуют крышу}

line (175,90,250,150);

floodfill(175,100,clgreen); {Закрашивает треугольник

(крышу)коричневым цветом}

end.

В модуле graphabc имеется еще и другие команды рисования графических примитивов, например, команда рисования эллипса. Зная основы работы в графическом режиме, их вы сможете изучить самостоятельно (см. Приложение ).

Коротко о главном

· В графическом режиме изображение на экране монитора строится из точек - пикселов. Каждый пиксель (точка) имеет две координаты: х и у.

· В качестве графических координат используют порядковые номера пикселов.

· Рисование различных геометрических фигур осуществляется с помощью специальных стандартных процедур (команд).

· Команды для работы в графическом режиме хранятся в библиотечном модуле GraphAbc, его необходимо подключать в разделе описаний программы с помощью зарезервированного слова Uses .

· Команда setpixel(x:integer,y:integer,c:color) рисует точку с координатами (х,у) цветом с.

· Команда setpencolor(color) устанавливает цвет пера, с помощью которого рисуют геометрические фигуры.

· Команда Line(x1,y1,x2,y2) рисует отрезок от точки с координатами (x1,y1) до точки с координатами (x2,y2).

· Команда Rectangle(x1,y1,x2,y2)рисует прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2).

· Команда Circle(x,y,r) рисует окружность с центром в точке (x,y) и радиусом r.

· Команда setpenwidth(n) устанавливает ширину линии в пикселях.

Построение графиков функций

До сих пор при создании рисунков использовали только первый квадрант системы координат. Для построения большинства функций в требуемом интервале изменения необходимо работать хотя бы в двух квадрантах. В общем случае полезно изображать систему координат в любой части плоскости, но наиболее наглядно располагать ее в центре экрана. В таких случаях, установив начало координат в точке (x0, y0) на экране, можно координаты (x, y) произвольной точки кривой определять разностью (x-x0, y-y0). После этого в программе можно употреблять не только положительные, но и отрицательные значения.

Рисунок получается маленьким, поэтому требуется увеличить масштаб изображения. Если для функции будет использован весь экран, надо увеличить рисунок по x и по y в зависимости от выбранного экрана.

Выбрать масштаб увеличения можно следующим образом:

-определить горизонтальный и вертикальный размеры графика (для этого вводятся границы области значений и определяются максимальное и минимальное значение функции на заданной области определения, затем вычисляются разности максимального и минимального значений аргументов и функции, которые и являются горизонтальным и вертикальным размерами графика соответственно);

-определить масштаб (сначала определяются масштабы изображения по горизонтали и вертикали с учетом размеров выбранного экрана по формуле:

масштаб(г/в) = размер экрана (по г/в) / размер графика (по г/в), затем из них выбирается меньший, который и принимается за необходимый масштаб. В нашем случае графический экран имеет размеры 640 на 480.

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

Пример. Построить график функции y=x2

Вариант 1
uses crt, graphabc;
var
x, y: real;
begin
SetWindowSize(640,480);
ClearWindow;
SetPenColor(clBlack);
Line(0, 400, 640, 400);
Line(320, 0, 320, 480);
x:= -4;
While x<=4 do
begin
y:= sqr(x);
SetPixel( round(x *70) + 320, 400 - round(y*20), clRed);
x:=x + 0.01;
end;
readln;
ClearWindow;
end.
Вариант 2
uses graphabc, crt;
var
x, y, mx, my, m,x1, x2, y1, y2,h: real;
function f(x:real): real;
begin
f:= sqr(x);
end;
begin
clrscr;
Write('Введите границы отрезка по оси x');
Read(x1, x2);
y1:=f(x1);
mx:=640 /(x2 -x1);
my:=400 / (y1 - 0);
If mx< my Then m:=mx
else m:= my;
h:= 1/m; x:=x1;
SetWindowSize(640,480);
ClearWindow;
SetPenColor(clBlack);
Line(0, 400, 640, 400);
Line(320, 0, 320, 480);
While x<= x2 do
begin
y:= -f(x);
SetPixel(round(x *m) +320, round(y*m) +400, clred);
x:= x+ h;
end;
readln;
ClearWindow;
end.
Для перевода текущих координат точки из декартовой системы координат в систему устройства можно воспользоваться формулами:
nx:=round((x-xmin)/(maxx-minx)*nx_max);
ny:=round((y-ymax)/(maxy-miny)*ny_max);
где: x,y - координаты текущей точки;
xmax, xmin - диапазон изменения x в декартовой системе координат;
ymax, ymin - диапазон изменения y в декартовой системе координат;
nx_max - количество пиксел по ширине экрана, можно получить при помощи функции WindowWidth;
ny_max - количество пиксел по высоте экрана, можно получить при помощи функции WindowHeight;
Их удобно оформить в виде функций. Заданную формулу для графика тоже лучше оформить в виде функции, тогда получится универсальная программа.
Вариант 3
program grafik;
uses graphabc,crt;
var xmin,xmax,ymin,ymax:real;
x,dx:real;
maxx, maxy: Integer;
function nx(x:real):integer;
begin nx:=round((x-xmin)/(xmax-xmin)*maxx) end;
function ny(y:real):integer;
begin ny:=round((y-ymax)/(ymax-ymin)*maxy) end;
function y(x:real):real;
begin y:=sqr(x) end;
begin SetWindowSize(640,480);
maxx:=640;
maxy:=480;
ClearWindow;
xmax:=5;xmin:=-5;
ymax:=5;ymin:=-5;
dx:=0.1;
SetPenColor(clBlack);
Line(MaxX div 2,0, MaxX div 2, MaxY);
Line(0,MaxY div 2, MaxX, MaxY div 2);
SetPenColor(clRed);
x:=-4;
while x<=4 do
begin line(nx(x),-ny(y(x)),nx(x+dx),-ny(y(x+dx)));
x:=x+dx
end;
Readln;
CloseWindow;
end.
Замечание: Лучше для рисования графика использовать процедуру line, а не putpixel, т.к. график получится без разрывов.

Полярная система координат

Полярная система координат -- система координат, ставящая в соответствие каждой точке на плоскости пару чисел (с;ц).

Основными понятиями этой системы являются точка отсчета (полюс) и луч, начинающийся в этой точке (полярная ось).

Координата с определяет расстояние от точки до полюса, координата ц -- угол между полярной осью и отрезком, соединяющим полюс и рассматриваемую точку. Координата ц берется со знаком «+», если угол от оси до отрезка вычисляется против часовой стрелки, и со знаком «-» в противоположном случае. Любая точка в этой системе имеет бесконечное число координат вида (с;ц + 2рn), которым соответствует одна и та же точка при любых натуральных n. Для полюса с = 0, а угол ц не определен.

Формулы перехода от полярной системы координат к декартовой:

от декартовой системы координат к полярной:

Полярные уравнения

Уравнение линии или кривой, выраженное в полярных координатах, называется полярным уравнением и обычно выражается с как функция с = с(ц). Полярная кривая симметрична:

относительно полярной оси (линии 0°/180°), если замена ц на - ц в уравнении приводит к эквивалентному уравнению;

относительно линии 90°/270°, если замена ц на р ? ц приводит к эквивалентному уравнению;

относительно полюса, если замена с на ? с приводит к эквивалентному уравнению.

Любая полярная линия может быть повернута на б° против часовой стрелки с помощью замены ц на ц ? б в полярном уравнении.

Примеры полярных линий

Окружность

Улитка Паскаля

Кардиоида

Лемниската

Архимедова спираль

Полярная роза

Каннабола

Пример программы, которая рисует окружность в полярных координатах

program okryjnost;

uses crt, graphabc;

var x0,y0,nx,ny,i,r:integer;

f:real;

begin SetWindowSize(640,480);

ClearWindow;

x0:=320; y0:=240;

r:=150;

SetPenColor(clBlack);

f:=0;

nx:=round(x0+r*cos(f));

ny:=round(y0-r*sin(f));

moveto(nx,ny);

While f<=2*pi do

begin f:=f+2*pi/60;

nx:=round(x0+r*cos(f));

ny:=round(y0-r*sin(f));

lineto(nx,ny);

end;

readln;

ClearWindow;

end.

Улитка Паскаля

Три улитки паскаля, конхоиды чёрной окружности: зелёная , красная (кардиоида) и синяя

Улитка Паскаля Ї плоская алгебраическая кривая 4-го порядка. Уравнение в прямоугольных координатах:

в полярных координатах:

Кардиоида

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

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

Кардиоида -- алгебраическая кривая четвёртого порядка.

Уравнения

В прямоугольных координатах:

В прямоугольных координатах (параметрическая запись):

В полярных координатах:

Архимедова спираль

Архимедова спираль -- спираль, плоская кривая, траектория точки M (рис.1), которая равномерно движется вдоль луча OV с началом в O, в то время как сам луч OV равномерно вращается вокруг O. Другими словами, расстояние с = OM пропорционально углу поворота ц луча OV. Повороту луча OV на один и тот же угол соответствует одно и то же приращение с.

Уравнение Архимедовой спирали в полярной системе координат записывается так: (1)

где k -- смещение точки M по лучу r, при повороте на угол равный одному радиану.

Рис. 1

Повороту прямой на 2р соответствует смещение a = |BM| = |MA| = 2kр. Число a -- называется шагом спирали. Уравнение Архимедовой спирали можно переписать так:

При вращении луча против часовой стрелки получается правая спираль (синяя линия) (см. Рис. 2), при вращении -- по часовой стрелке -- левая спираль (зелёная линия).

Рис. 2

Обе ветви спирали (правая и левая) описываются одним уравнением (1). Положительным значениям ц соответствует правая спираль, отрицательным -- левая спираль. Если точка M будет двигаться по прямой UV из отрицательных значений через центр вращения O и далее в положительные значения, вдоль прямой UV, то точка M опишет обе ветви спирали.

Луч OV, проведённый из начальной точки O, пересекает спираль бесконечное число раз -- точки B, M, A и так далее. Расстояния между точками B и M, M и A равны шагу спирали a = 2kр. При раскручивании спирали, расстояние от точки O до точки M стремится к бесконечности, при этом шаг спирали остаётся постоянным (конечным), то есть, чем дальше от центра, тем ближе витки спирали, по форме, приближаются к окружности.

Пример программы, которая рисует архимедову спираль

program aspiral;

uses crt, graphabc;

var x0,y0,nx,ny,i,n:integer;

f,r,k,half,hr:real;

begin SetWindowSize(640,480);

ClearWindow;

SetPenColor(clred);

r:=100;

x0:=320; y0:=240;

half:=pi/90;

k:=18;

n:=round(k*2*pi/half);

hr:=r/n;

f:=0;

moveto(x0,y0);

for i:=1 to n do

begin r:=exp(f/20);

nx:=round(x0+r*cos(f));

ny:=round(y0-r*sin(f));

lineto(nx,ny);

sleep(1);

f:=f+half;

r:=r+hr;

end; readln;

ClearWindow;

end.

Ромза -- плоская кривая, уравнение которой записывается в полярных координатах в виде

Здесь a и k -- постоянные.

Кривая располагается внутри окружности радиуса a и состоит из одинковых лепестков. Количество лепестков определяется величиной k.

Для целого k число лепестков равно k, если k нечётное и 2k, -- если чётное. Для дробного k вида , где m и n взаимно простые, количество лепестков розы равно m, если оба числа нечётные и 2m, если хотя бы одно -- чётно. При k иррациональном лепестков бесконечно много.

При значениях k > 1 роза является гипоциклоидой, а при k < 1 -- эпициклоидой.

Роза при k = 3

Роза при k = 4

Роза при k = 1 / 2

Роза при k = 2 / 3

Пример программы, которая рисует розы

program cvetki1; {z=a*(sin(b*f)-cos(b*f))}

uses crt, graphabc;

var a,b,x0,y0,nx,ny,c,i,m:integer;

h,x,y,n,k,p,f,z:real;

begin SetWindowSize(640,480);

ClearWindow;

randomize;

m:=10;

n:=0; k:=2*pi;

repeat b:=round(random(5)+2);

a:=round(random(6));

x0:=round(random(640));

y0:=round(random(480));

c:=RGB(clrandom,clrandom,clrandom);

h:=(k-n)/1000;

for i:=1 to 1000 do

begin f:=n+i*h;

z:=a*(sin(b*f)-cos(b*f));

x:=z*cos(f); y:=z*sin(f);

nx:=round(x0+x*m); ny:=round(y0-y*m);

setpencolor(c);

putpixel(nx,ny,c);

end;

sleep(100);

until keypressed;

end.

Каннабола

Каннабола -- это семейство математических функций, описывающих поведение внешней границы листа конопли.

Самая простая каннабола, аналитически записываемая как R = (1 + sin(t))(1 + 0.9cos(8t))(1 + 0.1cos(24t)), была впервые выведена Супманом.

Процедуры и функции Модуля GraphABC

Графические примитивы

procedure SetPixel(x,y,color: integer); - Закрашивает один пиксел с координатами (x,y) цветом color.

function GetPixel(x,y): integer; - Возвращает текущее значение цвета для пиксела с координатами (x,y).

procedure MoveTo(x,y: integer); - Передвигает невидимое перо к точке с координатами (x,y); эта функция работает в паре с функцией LineTo(x,y).

procedure LineTo(x,y: integer); - Рисует отрезок от текущего положения пера до точки (x,y); координаты пера при этом также становятся равными (x,y).

procedure Line(x1,y1,x2,y2: integer); - Рисует отрезок с началом в точке (x1,y1) и концом в точке (x2,y2).

procedure Circle(x,y,r: integer); - Рисует окружность с центром в точке (x,y) и радиусом r.

procedure Ellipse(x1,y1,x2,y2: integer); - Рисует эллипс, заданный своим описанным прямоугольником с координатами противоположных вершин (x1,y1) и (x2,y2).

procedure Rectangle(x1,y1,x2,y2: integer); - Рисует прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2).

procedure RoundRect(x1,y1,x2,y2,w,h: integer); - Рисует прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h - ширину и высоту эллипса, используемого для скругления краев.

procedure Arc(x,y,r,a1,a2: integer); - Рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 - вещественные, задаются в градусах и отсчитываются против часовой стрелки).

procedure Pie(x,y,r,a1,a2: integer); - Рисует сектор окружности, ограниченный дугой (параметры процедуры имеют тот же смысл, что и в процедуре Arc).

procedure Chord(x,y,r,a1,a2: integer); - Рисует фигуру, ограниченную дугой окружности и отрезком, соединяющим ее концы (параметры процедуры имеют тот же смысл, что и в процедуре Arc).

procedure TextOut(x,y: integer; s: string); - Выводит строку s в позицию (x,y) (точка (x,y) задает верхний левый угол прямоугольника, который будет содержать текст из строки s).

procedure FloodFill(x,y,color: integer); - Заливает область одного цвета цветом color, начиная с точки (x,y).

procedure FillRect(x1,y1,x2,y2: integer); - Заливает прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2), цветом текущей кисти.

procedure Polygon(var a; n: integer); - Строит ломаную по n точкам, координаты которых заданы в массиве a элементов типа Point.

procedure Polyline(var a; n: integer); - Строит замкнутую ломаную по n точкам, координаты которых заданы в массиве a элементов типа Point.

Цветовые константы и функции для работы с цветом

Модуль GraphABC содержит константы и функции для работы с цветами. Тип ColorType, описывающий цвет, определен следующим образом:

type ColorType=integer;

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

function RGB(r,g,b: integer): ColorType; - Возвращает целое значение, являющееся кодом цвета, который содержит красную, зеленую и синюю составляющие с интенсивностями r, g и b соответственно (r, g и b - целые в диапазоне от 0 до 255, причем, 0 соответствует минимальной интенсивности, 255 - максимальной).

function GetRed(color: ColorType): integer; - Выделяет красную составляющую из цвета color (целое в диапазоне от 0 до 255);

function GetGreen(color: ColorType): integer; - Выделяет зеленую составляющую из цвета color (целое в диапазоне от 0 до 255);

function GetBlue(color: ColorType): integer; - Выделяет синюю составляющую из цвета color (целое в диапазоне от 0 до 255).

Стандартные цвета задаются символическими константами:

clBlack - черный

clPurple - фиолетовый

clWhite - белый

clMaroon - темно-красный

clRed - красный

clNavy - темно-синий

clGreen - зеленый

clBrown - коричневый

clBlue - синий

clSkyBlue - голубой

clYellow - желтый

clCream - кремовый

clAqua - бирюзовый

clOlive - оливковый

clFuchsia - сиреневый

clTeal - сине-зеленый

clGray - темно-серый

clLime - ярко-зеленый

clMoneyGreen - цвет зеленых денег

clLtGray - светло-серый

clDkGray - темно-серый

clMedGray - серый

clSilver - серебряный

Действия с пером

function PenX: integer; - Возвращают текущую координату пера по оси X.

function PenY: integer; - Возвращают текущую координату пера по оси Y.

procedure SetPenColor(color: integer); - Устанавливает цвет пера, задаваемый параметром color.

function PenColor: integer; - Возвращает текущий цвет пера.

procedure SetPenWidth(w: integer); - Устанавливает ширину пера, равную w пикселам.

function PenWidth: integer; - Возвращает текущую ширину пера.

procedure SetPenStyle(ps: integer); - Устанавливает стиль пера, задаваемый параметром ps.

function PenStyle: integer; - Возвращает текущий стиль пера.

Действия с кистью

procedure SetBrushColor(color: integer); - Устанавливает цвет кисти, задаваемый параметром color.

function BrushColor: integer; - Возвращает текущий цвет кисти.

procedure SetBrushPicture(fname: string); - Устанавливает в качестве образца для закраски кистью образец, хранящийся в файле fname, при этом текущий цвет кисти при закраске игнорируется.

procedure ClearBrushPicture; - Очищает рисунок-образец, выбранный для кисти.

procedure SetBrushStyle(bs: integer); - Устанавливает стиль кисти, задаваемый параметром bs.

function BrushStyle: integer; - Возвращает текущий стиль кисти.

Действия со шрифтом

procedure SetFontColor(color: integer); - Устанавливает цвет шрифта.

function FontColor: integer; - Возвращает текущий цвет шрифта.

procedure SetFontSize(sz: integer); - Устанавливает размер шрифта в пунктах.

function FontSize: integer; - Возвращает текущий размер шрифта в пунктах.

procedure SetFontName(name: string); - Устанавливает наименование шрифта.

function FontName: string; - Возвращает текущее наименование шрифта.

По умолчанию установлен шрифт, имеющий наименование MS Sans Serif.

Наиболее распространенные шрифты - это Times, Arial и Courier New.

Наименование шрифта можно набирать без учета регистра.

procedure SetFontStyle(fs: integer); - Устанавливает стиль шрифта.

function FontStyle: integer; - Возвращает текущий стиль шрифта.

Стили шрифта задаются следующими именованными константами:

fsNormal - обычный;

fsBold - жирный;

fsItalic - наклонный;

fsBoldItalic - жирный наклонный;

fsUnderline - подчеркнутый;

fsBoldUnderline - жирный подчеркнутый;

fsItalicUnderline - наклонный подчеркнутый;

fsBoldItalicUnderline - жирный наклонный подчеркнутый.

function TextWidth(s: string): integer; - Возвращает ширину строки s в пикселях при текущих настройках шрифта.

function TextHeight(s: string): integer; - Возвращает высоту строки s в пикселях при текущих настройках шрифта.

Действия с рисунками

Работа с рисунками в модуле GraphABC производится либо с помощью описателей (целых чисел, однозначно определяющих рисунок), либо с помощью объектов класса Picture. Работа с помощью описателей позволяет манипулировать рисунками, используя обычные поцедуры и функции и не используя классы.

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

function LoadPicture(fname: string): integer;

n:=LoadPicture(fname) - загружает рисунок из файла с именем fname в оперативную память и возвращает описатель рисунка в целую переменную n; если файл не найден, то возникает ошибка времени выполнения. Загружать можно рисунки в формате .bmp, .jpg или .gif.

procedure SavePicture(n: integer; fname: string); - Сохраняет рисунок с описателем n в файл с именем fname. Рисунки можно сохранять в формате .bmp, .jpg или .gif.

procedure DrawPicture(n,x,y: integer); - Выводит рисунок с описателем n в позицию (x,y) графического окна.

procedure DrawPicture(n,x,y,w,h: integer); - Выводит рисунок с описателем n в позицию (x,y) графического окна, масштабируя его размеры к ширине w и высоте h. Если w<0, то рисунок зеркально отражается относительно вертикальной прямой, проходящей через x, если же h<0, то рисунок зеркально отражается относительно горизонтальной прямой, проходящей через y.

procedure DrawPicture(n: integer; x,y: integer; r: Rect); - Выводит часть рисунка с описателем n, заключенную в прямоугольнике r, в позицию (x,y) графического окна.

procedure DrawPicture(n: integer; x,y,w,h: integer; r: Rect); - Выводит часть рисунка с описателем n, заключенную в прямоугольнике r, в позицию (x,y) графического окна, масштабируя его размеры к ширине w и высоте h. Если w<0, то рисунок зеркально отражается относительно вертикальной прямой, проходящей через x, если же h<0, то рисунок зеркально отражается относительно горизонтальной прямой, проходящей через y.

procedure CopyRect(n: integer; dest: Rect; n1: integer; src: Rect); - Копирует часть рисунка с описателем n1, заключенную в прямоугольнике src, в прямоугольник dest рисунка с описателем n.

procedure DestroyPicture(n: integer); - Удаляет рисунок с описателем n из оперативной памяти, описатель рисунка при этом становится недействительным.

procedure SetPictureSize(n,w,h: integer); - Устанавливает размер рисунка с описателем n равным w на h пикселей.

function PictureWidth(n: integer): integer; - Возвращает ширину рисунка с описателем n.

function PictureHeight(n: integer): integer; - Возвращает высоту рисунка с описателем n.

function PictureTransparent(n: integer): boolean; - Возвращает режим прозрачности рисунка с описателем n.

function CreatePicture(w,h: integer): integer; - Создает рисунок ширины w и высоты h и возвращает его описатель.

function CreatePictureFromRect(r: Rect): integer; - Создает рисунок из прямоугольника r графического окна и возвращает его описатель.

function CreatePictureFromScreenBufferRect(r: Rect): integer; - Создает рисунок из прямоугольника r внеэкранного буфера графического окна и возвращает его описатель.

procedure SetPictureTransparent(n: integer; b: boolean); - Устанавливает (b=True) или отключает (b=False) режим прозрачности при рисовании рисунка с описателем n. Если b=True, то при его рисовании фон не отображается. Фоновым считается цвет левого нижнего пиксела рисунка.

function ImageIntersect(n1,n2: integer): boolean; - Определяет, пересекаются ли изображения на рисунках с описателями n1 и n2. Рисунки должны иметь одинаковый размер. Белый цвет на рисунке считается прозрачным. Изображения на рисунках считаются пересекающимися, если имеется хотя бы один пиксел, который не прозрачен и имеет одни и те же координаты для обоих рисунков.

function StandardImageFolder: string; - Возвращает стандартный каталог для картинок (обычно \Media\Images\).

procedure FlipPictureHorizontal(n); - Зеркально отображает картинку с описателем n относительно горизонтальной оси симметрии.

procedure FlipPictureVertical(n); - Зеркально отображает картинку с описателем n относительно вертикальной оси симметрии.

Действия с графическим окном

procedure ClearWindow; - Очищает графическое окно белым цветом.

procedure ClearWindow(c: ColorType); - Очищает графическое окно цветом c.

function WindowWidth: integer; - Возвращает ширину графического окна.

function WindowHeight: integer; - Возвращает высоту графического окна.

function WindowLeft: integer; - Возвращает отступ графического окна от левого края экрана.

function WindowTop: integer; - Возвращает отступ графического окна от верхнего края экрана.

function WindowCaption: string; - Возвращает заголовок графического окна.

procedure SetWindowWidth(w: integer); - Устанавливает ширину графического окна.

procedure SetWindowHeight(h: integer); - Устанавливает высоту графического окна.

procedure SetWindowLeft(l: integer); - Устанавливает отступ графического окна от левого края экрана.

procedure SetWindowTop(t: integer); - Устанавливает отступ графического окна от верхнего края экрана.

procedure SetWindowSize(w,h: integer); - Устанавливает ширину и высоту графического окна.

procedure SetWindowPos(l,t: integer); - Устанавливает отступ графического окна от левого и верхнего края экрана.

procedure SetWindowCaption(s: string); - Устанавливает заголовок графического окна.

procedure SetWindowTitle(s: string); - Устанавливает заголовок графического окна. Синоним SetWindowCaption.

procedure SaveWindow(fname: string); - Сохраняет содержимое графического окна в файл с именем fname.

procedure LoadWindow(fname: string); - Выводит в графическое окно рисунок из файла с именем fname. Файл ищется вначале в текущем каталоге, а затем в каталоге PascalABC\Media\Images.

procedure FillWindow(fname: string); - Заполняет графическое окно мозаикой из рисунка, содержащегося в файле с именем fname.

procedure FillWindow(n: integer); - Заполняет графическое окно мозаикой из рисунка с описателем n.

procedure CloseWindow; - Закрывает графическое окно.

function ScreenWidth: integer; - Возвращает ширину экрана.

function ScreenHeight: integer; - Возвращает высоту экрана.

procedure CenterWindow; - Центрирует графическое окно по центру экрана.

procedure MaximizeWindow; - Максимизирует графическое окно на экране.

procedure NormalizeWindow; - Восстанавливает положение графического окна на экране.

Все размеры устанавливаются и возвращаются в пикселах.

Задание режимов вывода

procedure SetDrawingSurface(n: integer); - Устанавливает в качестве канвы для рисования рисунок с описателем n. В результате весь графический вывод осуществляется не на экран, а на рисунок; настройки кисти, пера и шрифта также осуществляются для рисунка.

procedure SetDrawingSurface(p: Picture); - Устанавливает в качестве канвы для рисования рисунок с описателем n. В результате весь графический вывод осуществляется не на экран, а на рисунок; настройки кисти, пера и шрифта также осуществляются для рисунка.

procedure RestoreDrawingSurface; - Устанавливает в качестве канвы для рисования графическое окно.

procedure Redraw; - Осуществляет перерисовку окна вывода при заблокированном выводе в графическое окно.

procedure LockDrawing; - Блокирует вывод в графическое окно, осуществляя рисование только во внеэкранном буфере. Для перерисовки графического окна требуется вызвать процедуру Redraw. Если графический вывод перенаправлен в рисунок вызовом процедуры SetDrawingSurface, то не оказывает никакого воздействия на вывод.

procedure UnlockDrawing; - Снимает блокировку вывода в графическое окно.

procedure LockScreenBuffer; - Блокирует вывод во внеэкранный буфер графического окна. После вызова этой процедуры рисование незначительно ускоряется, однако, изображение графического окна перестает восстанавливаться.

procedure UnlockScreenBuffer; - Снимает блокировку вывода во внеэкранный буфер графического окна.

function DrawingIsLocked: boolean; - Возвращает True, если вывод в графическое окно заблокирован, и False в противном случае.

procedure SetRedrawProc(procedure RedrawProc); - Устанавливает пользовательскую процедуру для перерисовки содержимого графического окна, вызываемую автоматически в тот момент, когда требуется его перерисовка. В настоящее время используется в модуле ABCObjects для автоматической перерисовки всех графических объектов и фона.

Размещено на Allbest.ru

...

Подобные документы

  • Основные операции с матрицами. Проектирование объектно-ориентированного модуля для работы с матрицами в среде Delphi 7. Разработка программы, которая позволяет выполнять различные действия над матрицами. Описание интерфейса программы, исходный код модуля.

    курсовая работа [1014,2 K], добавлен 15.01.2013

  • Структурная диаграмма программного модуля. Разработка схемы программного модуля и пользовательского интерфейса. Реализация программного модуля: код программы; описание использованных операторов и функций. Вид пользовательской формы с заполненной матрицей.

    курсовая работа [215,3 K], добавлен 01.09.2010

  • Постановка задачи для модуля 1С. Бухгалтерия 3.0. Анализ существующих разработок в области интегрирования данных. Информационное обеспечение модуля "Связь 1С Предприятия 8.2. с "Казначейством". Программное и технологическое обеспечение данного модуля.

    курсовая работа [1,5 M], добавлен 10.06.2013

  • Структурная диаграмма программного модуля. Нахождение суммы элементов, находящихся над главной диагональю. Реализация программного модуля: код программы; описание использованных операторов и функций. Особенности тестирования программного модуля.

    курсовая работа [146,6 K], добавлен 01.09.2010

  • Разработка, составление и отладка программного модуля "База знаний" средствами программы Quick Sales. Описание схемы базы: возможности редактирования, удаления и добавления данных. Текст программы и контрольный пример поиска через панель управления.

    курсовая работа [519,0 K], добавлен 26.01.2013

  • Анализ графического модуля "graphics.h". Анализ функции модуля, констант, типов и его глобальных переменных. Реализация пользовательской библиотеки "mouse.h". Особенности работы с мышкой в графическом и обычном режимах, разработка программного кода.

    курсовая работа [36,5 K], добавлен 02.12.2009

  • Создание приложения, которое на вход получает компьютерную структуру, обрабатывает ее и выводит на экран. Краткое описание используемых пространств имен и классов. Файлы программного модуля Beta. Пример его работы, порядок подключения к Веб-странице.

    дипломная работа [1,3 M], добавлен 06.07.2015

  • Проектирование модуля программы 1С: "Поступление и выбытие удобрений", позволяющего вносить данные о клиентах, складах, контролировать поставки удобрений. Анализ предметной области и построение функциональной модели программы, ее отладка и тестирование.

    курсовая работа [1,6 M], добавлен 24.02.2015

  • Разработка функциональной и структурной схемы программного средства. Реализация основного модуля программы. Реализация модуля печати и модуля обновлений. Изучение взаимодействия информационных технологий, методов их интеграции и обмена данными.

    дипломная работа [3,2 M], добавлен 27.10.2017

  • Основы работы с графиков средствами OpenGL в C#. Ее спецификации, принципы и возможности. Direct3D как самостоятельная часть библиотеки Microsoft DirectX, которая отвечает за графику и вывод графической информации. Независимость от языка программирования.

    курсовая работа [2,1 M], добавлен 17.02.2013

  • Технико-экономические характеристики предметной области по учету готовой продукции на ОАО "ММК". Постановка задачи для модуля 1С. Бухгалтерия 3.0. Информационное обеспечение модуля "Связь 1С Предприятия 8.2. с "Казначейством". Оценка трудоемкости работы.

    дипломная работа [1,1 M], добавлен 06.06.2013

  • Современные модули памяти. Контроллер памяти некоторых чипсетов. Общая разрядность модуля. Варианты модуля 1 Гб PC2100 Registered DDR SDRAM. Двухканальный режим работы. Увеличение пропускной способности. Отличие модулей DDR2 от DDR. Корпуса BGA.

    презентация [1,9 M], добавлен 11.12.2013

  • Несколько определений ERP системы. Происхождение, развитие, признаки. Что дает внедрение. Особенности разработки программ на Java. Проектирование и реализация модуля ERP системы. Экономическая схема торговой деятельности. Пример реализации схемы.

    курсовая работа [1,1 M], добавлен 10.09.2008

  • Понятие и история развития языка Turbo Pascal, оценка его графических возможностей и особенностей. Инициализация графического режима. Управление экраном и окнами, цветом и фоном, принципы работы с текстом. Построение графиков функций и изображений.

    курсовая работа [159,9 K], добавлен 17.12.2014

  • Рабочее приложение для вычисления принадлежности точки заданной области. Реализация и проверка корректности ввода данных: радиуса, условий попарного пересечения окружностей, принадлежности центров окружностей одной прямой, заключенной внутри окружностей.

    курсовая работа [596,7 K], добавлен 13.01.2014

  • Графики вещественнозначных функций вещественного переменного. Построение двумерных графиков. Пример построения графика синусоиды. Пример использования функции subplot. Оформление двумерных графиков в системе MatLab. Основные функции оформления графиков.

    курсовая работа [826,3 K], добавлен 30.04.2019

  • Разработка модуля для вычисления значения функции, который впоследствии подключается к программе ввода исходных данных с контролем допусимого значения в таблицу. Проектирование модуля для работы со строками и для обработки массивов текстовой информации.

    курсовая работа [17,8 K], добавлен 24.09.2010

  • Сущность программирования с использованием среды Delphi 7 и ее основные графические возможности. Структура автономно компилируемого программного модуля и его принципы. Основные приемы работы с графическими процедурами, построение дуги, круга и эллипса.

    курсовая работа [138,2 K], добавлен 16.12.2011

  • Проектирование программного модуля в среде программирования Borland Delphi 7.0. Схемы алгоритмов решения задач по темам "Символьные переменные и строки", "Массивы", "Работа с файлами", "Создание анимации". Реализация программного модуля, код программы.

    отчет по практике [961,6 K], добавлен 21.04.2012

  • Краткая характеристика PI System и контура управления tic-104. Анализ и планирование требований к модулю tic-104. Проектирование модуля tic-104. Внедрение модуля в приложение PI ProcessBook. Доступ к данным временных рядов PI. Модульная база данных.

    курсовая работа [38,1 K], добавлен 09.05.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.