Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка Pascal 2005 Часть2.doc
Скачиваний:
3
Добавлен:
27.08.2019
Размер:
846.34 Кб
Скачать

Примеры программ работы с графикой

1. Построение мозаичных изображений.

Мозаичное изображение можно построить с помощью рисования прямоугольников. Для задания изображения нужно сформировать матрицу, содержащую вид этого изображения. Каждый элемент матрицы с координатами (i,j) – номер цвета, которым нужно закрасить прямоугольник, находящийся на пересечении i-ой строки и j-го столбца.

Пример. Создать мозаичное изображение вида:

Program Demo_1;

Uses Crt,Graph;

Const

h=10; {высота прямоугольника}

B: array[1..5,1..5] of 0..2=

((0,0,1,0,0), {задаем матрицу размером 5x5}

(0,1,0,1,0), {тип 0..2 – количество используемых цветов}

(1,0,2,0,1),

(0,1,0,1,0),

(0,0,1,0,0));

Var

Driver,Mode,i,j,x,y:Integer;

Begin

Driver:=Detect;

InitGraph(Driver,Mode,'');

For i:=1 to 5 do

begin

y:=i*h;

for j:=1 to 5 do

begin

x:=75+j*h;

case B[i,j] of

0:SetFillStyle(1,White); {меняем цвет заполнения}

1:SetFillStyle(1,Blue); {в зависимости от значения}

2:SetFillStyle(1,Yellow) {элемента матрицы}

end;

Bar(x,y,x+h,y+h); {рисуем прямоугольник}

end;

end;

ReadLn;

CloseGraph;

End.

2. Построение графика функции.

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

Система координат графического экрана

Декартова система координат

Для преобразования координат точки (x,y) декартовой системы координат в координаты точки (X,Y) системы координат графического режима можно использовать преобразования:

где wm, wnмасштабные коэффициенты по осям, (wx,wn) – координаты центра начала декартовой системы координат на графическом экране.

Пример: построить график функции y=sin(x).

Program Demo_2;

Uses Graph;

Const

a=-10; {[a,c] – отрезок, на котором строится график функции}

c=10;

wm=50; {масштабный множитель по оси ox}

wn=50; {масштабный множитель по оси oy}

Var

Driver,Mode:Integer;

i,wx,wy :Integer;

x,y:Real;

Begin

Driver:=Detect;

InitGraph(Driver,Mode,'');

{Задаем координаты начала системы координат в центре экрана}

wx:=GetMaxX div 2;

wy:=GetMaxY div 2;

{Рисуем оси}

SetColor(Red);

SetLineStyle (SolidLn,0,ThickWidth);

Line(0,wy,GetMaxX,wy); {ox}

Line(wx,0,wx,GetMaxY); {oy}

{Подписи осей}

SetColor(White);

OutTextXY(wx+7,4,'Y');

OutTextXY(GetMaxX-8,wy+6,'X');

{Вертикальные линии сетки}

SetColor(Green);

SetLineStyle (SolidLn,0,NormWidth);

i:=1;

While (wx-i*wm>0) or (wx+i*wm<GetMaxX) do

begin

Line(wx-i*wm,0,wx-i*wm,GetMaxY);

Line(wx+i*wm,0,wx+i*wm,GetMaxY);

Inc(i);

end;

{Горизонтальные линии сетки}

i:=1;

While (wy-i*wn>0) or (wy+i*wn<GetMaxY) do

begin

Line(0,wy-i*wn,GetMaxX,wy-i*wn);

Line(0,wy+i*wn,GetMaxX,wy+i*wn);

Inc(i);

end;

{Строим график точками}

i:=a*wm;

While i<=c*wm do

begin

x:=i/wm;

y:=sin(x);

PutPixel(Round(wx+wm*x),Round(wy+wn*y),White);

i:=i+1;

end;

ReadLn;

CloseGraph;

End.