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



Листинг 3 1



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








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