Предметы
Олимпиады
Реклама
Подготовка
Рекомендую
Мои сайты
Могилевский колледж
Могилевский зоосад
Сайт знакомств по Беларуси
Сайт для любителей спорта
ЗДЕСЬ МОЖЕТ БЫТЬ ВАШ БАННЕР 7805278[@]gmail.com


Использование растровых изображений. Построение графиков и диаграмм.

Использование растровых изображений. Построение графиков и диаграмм.


Задание 1
. Прочтите теорию.

Графические возможности языка программирования расширяет использование растровых изображений. Особенно интересно использование фотографий реальных объектов и явлений живой и неживой природы (машин, механизмов, людей, животных, растений), которые практически невозможно создать с помощью стандартных графических примитивов.

Процедуры и функции для работы с растровыми изображениями содержатся в модуле GraphABC.

Функция LoadPicture (fname) загружает рисунок из файла с именем fnameв оперативную память. Загружать можно рисунки в форматах BMP, JPG, GIF, PNG. Каждому загруженному рисунку, хранящемуся во время работы программы в оперативной памяти, присваивается целочисленный описатель (дескриптор) nm: LoadPicture(fname) . Он передается в качестве первого параметра во все остальные процедуры и функции работы с рисунками.

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

Растровые изображения выводятся в прямоугольные области, которые при создании графических композиций могут перекрывать друг друга. Процедура SetPictureTransparent (nm, b) устанавливает режим прозрачности изображения с описателем nm. По умолчанию режим прозрачности отключен (b=False)

Если b=True, то при рисовании фон не отображается. Фоновым считается цвет левого нижнего пикселя рисунка.

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

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

В среде PascalABC изображения можно «оживить» путем их многократного рисования и стирания. Избежать моргания экрана позволяет использование процедуры перерисовки Redraw.

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

Исследование законов природы и общества немыслимо без построения разнообразных графиков и диаграмм. На уроках математики Вы исследуете функциональные зависимости и строите графики. Замечательными возможностями обработки и предоставления данных в виде разнообразных графиков и диаграмм обладают электронные таблицы MS Excel, которые Вы изучали в 10-м классе. Познакомимся с построением графиков и диаграмм в среде PascalABC.

Задание 2.Запишите следующий пример к себе в тетрадь.

Пример 1. Составить программу, иллюстрирующую принцип действия проекционного аппарата. Программа может выглядеть так:

program Proector;

uses GraphABC;

var pic : integer;

begin

SetWindowSize (640, 520); {Размеры окна}

ClearWindow (clBlack); {Черный фон}

SetBrushColor (clSkyBlue);

Ellipse (106, 220, 122, 300); {Линза}

pic: = LoadPicture ("robotA.jpg”); {Загрузка изображения из файла}

DrawPicture(pic, 60, 310, -50, -100); {Вывод изображения, переворот}

DrawPicture (pic, 380, 10, 250, 500); {Увеличение}

SetPenColor (clYellow); {Вспомогательные линии}

line (60, 310, 680, 10); line (60, 210, 380, 510);

SetPenColor (clWhite);

line (10, 310, 630, 10); line (10, 210, 630, 510);

end.

Задание 3.Откройте папку Pictures, скопируйте картинку robotAв папку C/ProgramFiles/PABC/Media/Images. Наберите и запустите программу в Паскале.

Задание 4.Перепишите в тетрадь следующую программу. Скопируйте все картинки аналогично заданию 3. Наберите и запустите программу в Паскале.

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

program Avto3;

uses GraphABC;

var fon, avto, x, y, w, h: integer;

begin

SetWindowSize (600, 300);

fon: = LoadPicture (‘gorod. gif’); {Загрузка изображений}

avto: = LoadPicture(‘avto.jpg’);

SetPictureThansparent (avto, true); {Прозрачный фон}

x: = 0; y: = 170; w: = 240; h: = 100;

While x< 400 do

begin

ClearWindow; DrawPicture (fon, 0, 0);

DrawPicture (avto, x, y, w, h); {Вывод изображений}

x: = x + 10; w: = w-2; h: = h-1;

sleep(20); {Задержка на 20 мс}

Redraw; {Перерисовка}

end;

end.

Задание 5.Перепишите в тетрадь следующую программу. Наберите и запустите ее в Паскале.

Пример 3. Составить программу "Секундомер”: на фоне фотографии циферблата секундомера поместить движущиеся стрелки, которые останавливаются при нажатии любой клавиши. Программа может выглядеть так.

program Timer;

uses crt, GraphABC;

var fon, x0, y0, x, y, sec, min: integer;

begin

SetWindowSize (360, 480); {Размеры окна}

HideCursor; {Скрытие курсора}

x0: = 173; y: = 300; sec: = 0; min: = 0;

fon: = LoadPicture (‘timer. jpg’); {Загрузка изображения}

repeat

ClearWindow;

DrawPicture (fon, 0, 0, 360, 480); {Рисование циферблата}

sec: = sec + 1; min: = sec div 60; {Расчет секунд и минут}

x: = x0 + Round (120 * sin (Pi * sec/ 30)); {Секундная стрелка}

y: = y0 - Round (120 * cos (Pi * sec/ 30)); {Координаты конца}

SetPenWidth (3); Line (x0, y0, x, y); {Рисование}

x: = x0 + Round (100 * sin (Pi * min/ 30)); {Минутная стрелка}

y: = y0 - Round (100 * cos (Pi * min/ 30)); {Координаты конца}

SetPenWidth (7); Line (x0, y0, x, y); {Рисование}

sleep (1000);

Redraw;

until (min> = 60) or keyPressed;

end.

Задание 6. Записать в тетрадь и выполнить на компьютере следующие программы.

Пример 4. Составить программу, которая строит график зависимости y(x)=0,4x+2sin3x на промежутке [-15;15]. Программа может выглядеть следующим образом.

program Grafik;

uses crt, GraphABC;

var, x0, y0, x1, y1, k: integer; x, y: real;

begin

SetWindowSize (640, 400);

x0: = 320; y0: = 200; k: = 20;

line (20, y0, 620, y0); {Ось абцисс}

line (x0, 20, x0, 380); {Ось ординат}

SetPenColor (clRed); {Цвет пера}

x: = -15; {Начальное значение аргумента}

While x< = 15 do

begin

y: = 0.4 * x + sin (3 * x); {Функция}

xl: = trunс (x0 + x * k); {Экранные координаты}

y1: = trunс (y0 + y * k);

circle (x1, y1, 2);

x: = x + 0.02;

end;

end.

Пример 5. В массивах хранятся данные о площадях посевов зерновых культур. Составить программу, которая вычисляет, какой процент в общей площади посевов зерновых составляет площадь посевов каждой культуры, выводит данные и строит круговую диаграмму. Программа может выглядеть так.
program Diagram2;

uses crt, GraphABC;

const A: array [1..5] of integer = (47, 63, 22, 27, 12);

B: array [1..5] of string = (‘Рожь’, ’Пшеница’, ’Овес’, ‘Ячмень’, ‘Гречиха’);

var u, u0, s, i: integer;

begin

SetWindowSize (400, 400); s: = 0; u0: = 0;

for i: = 1 to 5 do S: = S + A [ I ] {Вычисление суммарной площади посевов}

for i: = 1 to 5 do

begin

Writeln (B [ i ], ‘ ’, A [ i ], ‘га’, round (100 * A [ i ] / S ), ‘\\’ );

SetBrushColor (rgb (random (255), random (255), random (255)));

u: = u0 + round(A[ i] * 360 / S); {Вычисление коричневого угла сектора}

Pie (220, 240, 140, u0, u); {Рисование сектора}

u0: = u; {Новое значение начального угла следующего сектора}

end;

end.

 

Контрольные вопросы:

1. Какие форматы рисунков поддерживает PascalABC?

2.Что такое анимация?

3. Составьте программу, которая загружает из файлов и выводит на экран портреты ученых (Эйнштейна, Резерфорда, Бора). Картинки вами уже загружены.

4. Составьте программу, которая строит график зависимости y(x)=0,5x*cos2x на промежутке [-12;12].


 
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо зайти на сайт под своим именем.




Подписка на сайт
i.urok.by
Подписаться письмом

Контакты
Admin
Статус: Администратор
Mail Mail: 7805278[@]gmail.com

Реклама
Бесплатные курсы
ЗДЕСЬ МОЖЕТ БЫТЬ ВАШ БАННЕР 7805278[@]gmail.com