к оглавлению

Пример программы отображения графика функции

Помимо простых фигур программно можно отображать на экране монитора сложные кривые, например, в виде графика функций. Рассмотрим очередной пример программы, осуществляющий именно такие операции. Создайте новое приложение и поместите на его форму пять компонентов кнопок Button и один компонент Image. Задайте свойство Caption для кнопок от первой до пятой, присваивающие им соответственно названия: Рисовать, +, —, Очистить и Функция. Размер пятой кнопки увеличьте по горизонтали примерно в два раза. Компонент Image растяните и разместите на оставшейся части формы. Свойство Caption формы заполните названием Function. Разместите все компоненты на форме в соответствии с рис. 23.3.

 

Окно формы программы Function

Рис. 23.3. Окно формы программы Function

 


Теперь сохраните модуль проекта в файле с названием Ufunction.cpp, а сам проект в файле с названием Function.bpr. Вставьте в файл описаний Ufunction.h после строки   public:  // user declarations следующие программные строки:

 

int n;   // Номер функции
float m; // Масштаб

 

описывающие переменные номера функций и масштаба.


После оператора #inciude "ufunction.h" в файле Ufunction.cpp впишите строку:

 

#include  <math.h>


которая предназначена для подключения к проекту библиотеки математических функций, что позволит нам использовать их в программе, в том числе и тригонометрические функции.


Далее впишем в программу обработчики события OnClick для всех кнопок. Начнем с четвертой кнопки, отвечающей за очистку экрана. Для нее обработчик события OnClick должен выглядеть в соответствии с листингом 23.7.

 

Листинг 23.7. Обработчик события OnClick

void __fastcall TForm1:: Button4Click(TObject *Sender)
{
Image1->Canvas->FillRect(Rect (0,0,Image1->Width, Image1->Height));
}

 

 

Программная строка обработчика содержит знакомый нам метод FillRect.
Для обработчика события OnClick кнопки рисования введем строки программного кода (листинг 23.8).


Листинг 23.8. Обработчик события OnClick кнопки рисования

#define  PI  3.14159
float X, Y;      // Переменные функции
int  PX,   PY;   //  Координаты пикселов
Form1->Button4Click(0);
Image1->Canvas->MoveTo(0,Image1->Height/2);
for(PX=0;   PX<=Image1->Width;   РХ++)
{
X=PX*4*PI/Image1->Width;
switch(n)        // Вычисление функций

{
case 1: Y=m*sin(X) ; break;
case 2: Y=m*X*sin(X*X); break;
case 3: Y=m*cos (X)*sin(X) ; break;
default: break;
}
PY=Image1->Height- (Y+1) *Image1->Height/2;
Image1->Canvas->LineTo (PX, PY) ;
}
 

Первая из этих строк описывает константу PI, принимающую значение числа Пифагора. Далее следует описание переменных Х, Y, PX и PY, служащих переменными функции и координатами точек рисунка. После этого следует вызов функции обработчика события OnClik кнопки очистки экрана, созданной нами ранее и предназначенной для очистки канвы компонента Image (то есть рисунка на экране). Далее вписана строка установки пера для рисования в левую среднюю точку экрана. После этой строки в программе присутствует оператор для организации цикла вычисления значения переменной y для множества значений точек РХ экрана от 0 до максимальной величины ширины экрана в пикселах. Переменная Х вычисляется в самом цикле. Одновременно масштабируется ее размер по вертикали экрана.

 

Оператор switch служит для сравнения номера выбранной функции и вычисления для нее значения переменной Y.
Функции могут быть произвольными. В дальнейшем при необходимости можно будет изменять и расширять список этих функций. Далее в программе вычисляется значение координат PY и рисуется фрагмент линии функции.
В обработчик события OnClick кнопки + (плюс) вставьте строки удвоения коэффициента функции и вызова обработчика перерисовки графика функции, который принадлежит кнопке рисования Button1:

m=m*2;
Forml->ButtonlClick(0);

 

В обработчик события OnClick кнопки — (минус) вставьте строки уменьшения вдвое коэффициента функции и тот же обработчик перерисовки графика функции:

m=m/2;
Forml->ButtonlClick(0);

 

Наконец, для кнопки выбора функции Button5 впишите обработчик события OnClick, состоящий из строк, приведенных в листинге 23.9.

 

Листинг 23.9. Обработчик события OnClick кнопки выбора функции

n++; if(n>3) n=l;
switch(n) // Выбор функций
{
case 1: Button5->Caption="Y=m*sin(X)"; break;
case 2: Button5->Caption="Y=m*X*sin(X*X)"; break;
case 3: Button5->Caption="Y=m*cos(X)*sin(X)"; break;
default: break;
}

 

Здесь будет происходить автоматический инкремент номера функции и присвоение ему начального значения при превышении максимального значения п>3. В зависимости от номера функции свойство Caption кнопки Buttons будет менять свое значение на строку с записью самой математической функции.
Для завершения программы необходимо задать начальные значения для переменных масштаба и номера функции. Это делается записью программных строк инициализации переменных m и п в теле функции формирования формы. Здесь же необходимо вписать вызов обработчика события OnClick для кнопки очистки экрана. В конечном виде функция формирования формы должна иметь запись, соответствующую листингу 23.10.

 

Листинг 23.10. Функция формирования формы

__fastcall TForm1: :TForm1 (TComponent* Owner)
{
m=0.05;   n=l;
Forml->Button4Click(0);
}

 

Теперь запустите приложение и проверьте его работу. Результат работы программы при выводе на экран функции Y=m*x*sin(x*x) представлен на рис. 23.4.

 

Результат работы программы

Рис. 23.4. Результат работы программы


В этой программе мы использовали не только методы, но и некоторые функции, например sin(x) и cos(x). Среда разработки Borland C++Builder 6 имеет огромное количество встроенных библиотек с готовыми к применению функциями, что позволяет писать мощные и элегантные программы. Для знакомства с функциями можно прибегнуть к встроенной справочной системе среды разработки, вызвав ее нажатием клавиши <F1> или <Ctrl>+<Fl>, когда курсор редактора находится на самой функции. Аналогично можно поступать при знакомстве с другими методами, не рассмотренными здесь.

 

Кроме того, среда разработки имеет встроенный суфлер кода, который автоматически выводит на экран список доступных методов, свойств и функций объектов при вводе символа "->", "." или "(" после записи имени объекта.
Полезной является комбинация клавиш <Ctrl>+<Space>, вызывающая список доступных функций и методов для объекта, на котором расположен курсор редактора.
Комбинация клавиш <Ctrl>+<J> открывает окно с перечнем функций-заготовок, которые выбираются программистом с помощью стрелок курсора и вставляются в программу после нажатия клавиши <Enter>.
Этими замечательными инструментами среды разработки удобно пользоваться для вызова встроенной справочной системы, ускорения ввода кода программы и исключения ошибок в записи программных строк

Скачать файлы проекта

к оглавлению

Знаете ли Вы, что локальность - означает, что реализация одной абстракции может быть создана и рассмотрена без необходимости анализа реализации какой-либо другой абстракции. Принцип локальности позволяет составлять программу из абстракций, создаваемых людьми, работающими независимо друг от друга. Один человек может создать абстракцию, которая использует абстракцию, созданную кем-то другим.

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution