- •Лабораторна робота 10
- •Мета. Навчитись розробляти програми, які працюють з графікою; створювати картинки за допомогою графічних примітивів, або ілюстрацій, створених в графічному редакторі Завдання до роботи
- •Теоретічні відомості Графічні примітиви
- •Ілюстрації
- •Запрограмувати обробку подій OnPaint та OnResize для форми.
- •Створіть проект для роботи з бітовими зображеннями.
- •Сформуйте фоновий рисунок як багатократне виведення бітового зображення на поверхню форми, використавши функцію Background() (рис. 4)
- •Виведіть зображення фону та рисунку на форму за допомогою методу Draw()
- •Завантажте бітове зображення із ресурсу програми
- •Створити файл ресурсів
- •Підключити файлу ресурсів
- •Збережіть створену програму у своїй папці.
- •Створіть ехе-файл вашої програми.
- •Продемонструйте створену форму викладачеві. Закінчіть роботу.
- •Контрольні запитання:
- •1. Назвіть основні Методи для рисування графічних примітивів
- •2. Як здійснити виведення тексту на поверхню Canvas?
Ілюстрації
Найпростіше вивести іллюстрацію, яка знаходиться у файлі з розширенням .bmp, .jpg або .ico, можна за допомогою компоненти image. Основні властивості компоненти наведені в таблиці 4.
Таблиця 4. Властивості компоненти image
|
Властивість |
Опис |
|
Picture |
Ілюстрація, яка відображується в полі компоненти |
|
Width, Height |
Розмір компоненти. Якщо розмір компоненту менше розміру ілюстрації і значення властивостей AutoSize, Strech і Proportional рівне false, то відображується частина ілюстрації |
|
Proportional |
Ознака автоматичного масштабування картинки без спотворення. Щоб масштабування було виконане, значення властивості AutoSize має бути false |
|
Strech |
Ознака автоматичного масштабування (стиснення або розтягування) ілюстрації відповідно до реального розміру компоненти. Якщо розмір компоненти не пропорційний розміру ілюстрації, то ілюстрація буде спотворена |
|
AutoSize |
Ознака автоматичної зміни розміру компоненти відповідно до реального розміру ілюстрації |
|
Center |
Ознака визначає розташування картинки в полі компоненту по горизонталі, якщо ширина картинки менше ширини поля компоненти. Якщо значення властивості рівне false, то картинка притиснута до правої межі компоненти, якщо true — то картинка розташована по центру |
|
Visible |
Ознака вказує, чи відображується компонента і, відповідно, ілюстрація на поверхні форми |
|
Canvas |
Поверхня, на яку можна вивести графіку |
Хід роботи:
Задача 1. Побудова графіка функції. Використовуючи властивість Pixels, побудувати графік функції у = 2 sin(x) e*/5. Границі діапазону зміни аргумента функції є вхідними даними. Діапазон зміни значень функції повинен обчислюватися під час роботи програми. На основі цих даних програма обчислює масштаб, який дозволяє побудувати графік таким чином, щоб він займав всю область форми, призначену для виведення графіка. Для побудови графіка використати всю доступну область форми, причому якщо під час работи програми користувач змінить размір вікна, то графік повинен виводитись заново з врахуванням реальних размірів вікна.
-
Створити форму для рисування графіка функцій по точках.
-
Нарисувати графік функції 2*sin(x)*ex/5.
-
Підключити файл заголовків math.h.
-
Створіть функцію, графік якої потрібно побудувати
float f(float х)
{return 2*sin(x)*exp(x/5); }
-
Створіть функцію Grafik,оголосивши її прототип в разділі private у файлі заголовків програми. Текст функції наведено нище.
void TForml::Grafik()
{
float xl, x2; // границі зміни агрумента функцій
float yl, y2; // границі зміни значення функції
float x; // аргумент функції
float у; // значення функції в точці х
float dx; // приріст аргумента
int 1, Ь; // лівий нижній кут області виведення графік
int w, h; // ширина и висота області виведення графіка
float mx, my; // масштаб по осям X і Y
int xO, уО; // початок координат
// область виведення графіка
1-10; // X - координата лівого верхнього кута
b = Forml->ClientHeight-20; // Y — координата лівого нижнього кута
h = Forml->ClientHeight-40; // висота
w = Forml->Wldth - 20; // ширина
xl = 0; // нижня границя діапазона аргумента
х2 = 25; // верхня границя діапазона аргумента
dx = 0.01; //крок аргумента
// знайдемо максимальне и мінімальне значення функції на відрізку [xl,x2]
x = xl;
yl = f(х); // мінімум
у2 = f(x); // максимум
do
{
у = f(х);
if ( у < yl) yl = у;
if ( у > у2) у2 = у;
х += dx; } while (x <= х2);
// обчислюємо масштаб
my = (float)h/abs(y2-yl); // масштаб по осі Y
mx = w/abs(x2-xl); // масштаб по осі X
// осі
хО = 1+abs(xl*mx);
уО = b-abs(yl*my);
Canvas->MoveTo(xO,b);Canvas->LineTo(xO,b-h);
Canvas->MoveTo(l,yO);Canvas->LineTo(1+w,yO);
Canvas->TextOutA(xO+5,b-h,FloatToStrF(y2,ffGeneral,6,3));
Canvas->TextOutA(xO+5,b,FloatToStrF(yl,ffGeneral, 6,3));
// побудова графіка
x = xl; do {
У = f (x);
Canvas->Pixels[xO+x*mx][yO-y*my] = clRed;
x += dx;
}
while (x <= x2);
}
