Иллюстрированный самоучитель по C++ Builder

Точка

Поверхности, на которую программа может осуществлять вывод графики, соответствует объект canvas. Свойство Pixels, представляющее собой двумерный массив типа TColor, содержит информацию о цвете каждой точки графической поверхности. Используя свойство pixels, можно задать цвет любой точки графической поверхности, т. е. "нарисовать" точку. Например, инструкция:

Canvas › Pixels[10][10] = clRed

Окрашивает точку поверхности формы в красный цвет.

Размерность массива pixels определяется реальным размером графической поверхности. Размер графической поверхности формы (рабочей области, которую также называют клиентской) определяют свойства clientwidth и clientHeight, а размер графической поверхности компонента 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, b; // левый нижний угол области вывода графика
int w, h; // ширина и высота области вывода графика
float mx, my; // масштаб по осям X и Y
int x0, у0; // начало координат
// область вывода графика
1-10; // X – координата левого верхнего угла
b = Forml › ClientHeight-20; // Y – координата левого нижнего угла
h = Forml › ClientHeight-40; // высота
w = Forml › Wldth– 20; // ширина
x1 = 0; // нижняя граница диапазона аргумента
х2 = 25; // верхняя граница диапазона аргумента dx = 0.01;
 //шаг аргумента
// найдем максимальное и минимальное значение
// функции на отрезке [xl,x2]
x = xl;
yl = f(х); // минимум
у2 = f(x); // максимум
do
{
у = f(х);
if (у < y1) y1 = у;
if (у > у2) у2 = у;
х += dx; } while (x <= х2);
// вычислим масштаб
my = (float)h/abs(y2-yl); // масштаб по оси Y
mx = w/abs(x2-xl); // масштаб по оси X
// оси
х0 = 1+abs(xl*mx);
у0 = b-abs(yl*my);
Canvas › MoveTo(x0,b);Canvas › LineTo(x0,b-h);
Canvas › MoveTo(1,y0);Canvas › LineTo(1+w,y0);
Canvas › TextOutA(xO+5,b-h,FloatToStrF(y2,ffGeneral,6.3));
Canvas › TextOutA(xO+5,b,FloatToStrF(y1,ffGeneral, 6.3));
// построение графика x = xl; do {
У = f (x);
Canvas › Pixels[x0+x*mx][y0-y*my] = clRed;
x += dx;
}
while (x <= x2); }
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.