:: Меню ::

Головна
Передмова
СЕРЕДОВИЩЕ РОЗРОБКИ C++ BUILDER
Початок роботи
Перший проект
ПРАКТИКУМ ПРОГРАМУВАННЯ
Графіка
Мультимедіа
Бази даних
Компонент програміста
Консольне застосування
Довідкова система
Створення настановного диска
Приклади програм
C++ Builder — короткий довідник
Книга для гостей
Контакти
Добавити у вибране

:: Друзі ::

 

:: Лічильники ::

=

 

 

 

 

 

Крапка



Поверхні, на яку програма може здійснювати виведення графіки, відповідає об'єкт canvas. Властивість Pixels що є двовимірним масивом типу Tcolorмістить інформацію про колір кожної точки графічної поверхні. Використовуючи властивість pixels можна задати колір будь-якої точки графічної поверхні, тобто "намалювати" крапку. Наприклад, інструкція

Canvas->pixels[10][10]   = clred

забарвлює точку поверхні форми в червоний колір.

Розмірність масиву pixels визначається реальним розміром графічної поверхні. Розмір графічної поверхні форми (робочій області, яку також називають клієнтською) визначають властивості зlientwidth і зlientheight а розмір графічної поверхні компоненту image — властивості width і Height. Лівій верхній точці робочої області форми відповідає елемент pixels [0] [0] а правою ніжней —

Pixels[Ciientwidth - 1][Cliientheight -1].

Наступна програма (лістинг 3.1), використовуючи властивість Pixels будує графік функції у = 2 sin(x) e*/5. Межі діапазону зміни аргументу функції є початковими даними. Діапазон зміни значення функції обчислюється під час роботи програми. На підставі цих даних програма обчислює масштаб, що дозволяє побудувати графік так, щоб він займав всю область форми, призначену для виведення графіка. Для побудови графіка використовується вся доступна область форми, причому якщо під час роботи програми користувач змінить розмір вікна, то графік буде виведений наново з урахуванням реальних розмірів вікна.

Лістинг 3.1. Графік функції

// обробка події Onpaint
void__fastoall Tforml::formpaint(Tobject *Sender)
{
Grafik(); 
}
// обробка події Onresize
void __fastcall Tforml::formresize(Tobject *Sender)
{
Trect ret = Rect(0,0,ciientwidth,ciientheight);
Canvas->fillrect(ret);  // стерти Grafik(); 
}
#include "math.h" // для доступу до sin і exp
// функція, графік якої треба побудувати
float f(float х)
{
return 2*sin(x)*exp(x/5); }
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); }

Основну роботу виконує функція Grafik (її оголошення треба помістити в розділ private оголошення форми в заголовному файлі програми). Функція Grafik спочатку обчислює максимальне (у2) і мінімальне (yi) значення функції на відрізку [x1, x2]. Потім, використовуючи інформацію про ширину і висоту області виведення графіка, вона обчислює коефіцієнти масштабування по осях X і Y. Після цього обчислює координату Y горизонтальної осі, координату X вертикальної осі і викреслює координатні осі. Потім виконується безпосередня побудова графіка (мал. 3.8).



Мал. 3.8. Графік, побудований по крапках


Уизов функції Grafik виконують функції Обробки подій Onpaint і Onresize. Функція Tform1:: Formpaint забезпечує викреслювання графіка після появи форми на екрані в результаті запуску програми, а також після появи форми під час роботи програми — наприклад, в результаті видалення або переміщення інших вікон, що повністю або частково перекривають вікно програми. Функція Tform1: :FormResize забезпечує викреслювання графіка після зміни розміру форми.

Приведена програма універсальна. Замінивши інструкції в тілі функції f (х), можна отримати графік іншої функції. Причому незалежно від виду функції її графік займатиме всю область, призначену для виводу. Слід звернути увагу на те, що приведена програма працює коректно, якщо функція, графік якої треба побудувати, набуває як позитивних, так і негативних значень. Якщо функція у всьому діапазоні тільки позитивна або тільки негативна, то в програму необхідно внести зміни. Які — хай це буде вправою для читача.

 


проститутки Перми. | Только опытные проститутки для вашего ублажения. | Не упускай свой шанс - проститутки Владивостока ждут тебя. ПростаПорно.ком самый крутой порносайт в рунете.
x

:: Наша кнопка ::

Отримати код:

Підтримайте наш сайт і розмістіть нашу кнопку на своєму ресурсі.


:: Реклама ::


:: Посилання ::

-


 

 

 


Copyright by Zvircom © 2009