Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
374.doc
Скачиваний:
11
Добавлен:
30.04.2022
Размер:
3.16 Mб
Скачать

Выбор метода решения задачи

Как показали предыдущие примеры, лучшим способом рисования графика является рисование пером.

Алгоритм решения задачи

Рассмотрим, решение каких частных задач необходимо запрограммировать для построения графика.

  1. Определить размеры области, на которой будет отображаться график. Для этого необходимо определить максимальное и минимальное значение функции, в пределах которых будет изменяться амплитуда графика.

  2. Определить положение осей координат.

  3. Определить масштаб изображения, позволяющий построить график таким образом, чтобы он занимал всю область формы, предназначенную для вывода графика.

  4. Выбрать толщину и цвет кривой, отображающий график.

  5. Выбрать метод исправления возможных искажений графического изображения.

  6. Вычисление значений функции для заданных значений a и b и выбранного диапазона изменений аргумента x.

  7. Нарисовать график в выделенной области формы.

Разработка интерфейса пользователя

Разместим на форме:

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

– командную кнопку Button EXIT для завершения работы программы. Вид формы представлен на рис. 7.2.

Рис. 7.2. Интерфейс программы построения графика

Разработка кода программы

Для построения графика используется вся доступная область формы. Причем, если во время работы программы пользователь изменит размер окна, график будет выведен заново с учетом реальных размеров. Основу работы программы составляет функция Grafic1. Ее необходимо поместить в заголовочный файл формы в раздел Private. После запуска программы функция по исходным данным определяет область вывода графика, вычисляет коэффициенты масштабирования по осям и вычерчивает координатные оси. После вызова функции Fun (x) рисуется график.

Код программы приведен на листинге 7.3.

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

Листинг 7.3

Программа построения графика

#include <vcl.h>

#pragma hdrstop

#include "UnGrafic1.h"

#include "math.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TFGrafic1 *FGrafic1;

//---------------------------------------------------------------------------

__fastcall TFGrafic1::TFGrafic1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

float Fun(float x)

{

return 2* sin(x)*exp(x/5);

}

void __fastcall TFGrafic1::Button1Click(TObject *Sender)

{

FGrafic1->Close();

}

//---------------------------------------------------------------------------

void Grafic1()

{

float x1,x2;// граница изменения аргумента функции

float y1,y2; // граница изменения значения функции

float x; // текущее значение координаты x

float y; // текущее значение координаты y

float dx; // приращение аргумента

int l, b; // левый верхний и нижний углы вывода функции

int w,h; // ширина и высота области вывода графика

float mx,my; // масштаб по оси x и y

int x0,y0; // начало координат

//область вывода графика

l = 10; // x – координата верхнего левого угла поля графика

b = Form1->ClientHeight-20; //y – координата левого нижнего угла поля графика

h = Form1->ClientHeight-40; //высота

w = Form1->Width-20; // ширина

x1 = 0; // нижняя граница диапазона аргумента

x2 = 25; // верхняя граница диапазона аргумента

dx = 0.01; // шаг аргумента

// найдем максимальное и минимальное значение

//функции на отрезке [x1,x2]

x = x1 ;

y1 = Fun(x); // минимум

x=x2;

y2 =Fun(x); // максимум

do {

y = Fun(x);

if (y <= y1) y1 = y;

if (y > y2) y2 = y;

x += dx;

} while(x <=x2);

//вычислим масштаб

my = (float)h/abs(y2 - y1);// масштаб по оси x

mx = w/abs(x2 - x1); );// масштаб по оси y

x0 = l + abs(x1* mx); //ось x

y0 = b-abs(y1*my);// //ось y

Canvas -> MoveTo(x0,b-h);

Canvas -> LineTo(x0,b);

Canvas -> MoveTo(1,y0);

Canvas -> LineTo(1+w,y0);

Canvas -> TextOutA(x0+5,b-h,FloatToStrF(y2,ffGeneral,6,3));

Canvas -> TextOutA(x0+5,b,FloatToStrF(y1,ffGeneral,6,3));

//построение графика

x = x1;

do{

y = Fun(x);

Canvas -> Pixels[x0+x*mx][y0 - y*my] = clRed;

// Canvas -> LineTo((x0 + x*mx),(y0 - y*my));

x =x + dx;

}while(x <= x2);

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]