C++ Builder - вопросы программирования


         

обработка события OnResize void __fastcall



Листинг 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).

Содержание  Назад  Вперед