Технология рисования
Каждая форма в C++Builder имеет свойство Canvas (Холст), представляющее собой достаточно сложный класс с набором методов, позволяющих рисовать точки, линии, фигуры, заполнять их цветом и т. д. Для создания графика потребуются два метода этого класса — метод MoveTo(x,y), устанавливающий новое начальное положение — точку (х,у) для следующих операций рисования, и метод LineTo(x,y), проводящий линию из предыдущей точки в новую.
Метод отрисовки
После того как программа C++Builder запущена, она автоматически открывает новый проект. Дополнительные компоненты на форме размещать не надо — требуется только переопределить метод, ответственный за перерисовку изображения на форме.
Для этого в Инспекторе объектов надо выбрать закладку Events (События), на ней найти строку с названием OnPaint и дважды щелкнуть на ней мышкой. C++Builder автоматически сгенерирует соответствующий программный код обработки события перерисовки:
void fastcall TForml::FormPaint(TObject *Sender)
{
}
Алгоритм отображения графика несложен. Он умещается в нескольких операторах.
Переменные Width (Ширина) и Height (Высота) — свойства формы, определяющие ее текущую ширину и длину в пикселах. Координату по оси Y нельзя взять непосредственно из переменной у, а надо вычислять по формуле Height-y, потому что в C++Builder считается, что точка с координатами (0,0) расположена в верхнем левом углу окна, а ось Y направлена вниз. Для удобства восприятия эту ось надо перевернуть.
void fastcall TForml::FormPaint(TObject *Sender)
{
int x,y;
// начальные координаты
х = 0; у = 0;
// начальная точка графика
Canvas->MoveTo(0,Height);
// цикл, пока каждая координата очередной точки
// укладывается в размер экрана
while ( х < Width && у < Height )
{
// следующая точка по оси X
х = х + 1;
// соответствующее значение по оси Y
У = f (x) ;
// в новую точку (x,Height-y) рисуется линия
Canvas->LineTo(x,Height-y);
}
}
Чуть выше метода Form Paint надо определить функцию f(), не привязанную ни к какому классу. В ней происходит вычисление значения анализируемой математической функции по заданному аргументу. Для примера она может выглядеть так:
int f(int x)
{
int у;
у = floor(50*log(x));
return у;
}
Стандартная функция log() вычисляет значение логарифма. Коэффициент 50 нужен, чтобы кривая пропорционально размещалась в окне. Функция floor() вычисляет целую часть аргумента (преобразовывает его в целое число), потому что в методах рисования надо указывать координаты только в целых числах (пикселах).
Исходно функции log(), floor() и ряд других не подключены к текущему проекту. Чтобы они стали доступными, библиотеку, в которой они хранятся, необходимо явно указать компилятору. Делается это с помощью командной строки
#include "Math.h"
которую можно поместить в самое начало текущего файла.
Далее проект надо сохранить, выполнить компиляцию и запустить, нажав клавишу F9. В дальнейшем, изменив один оператор присваивания в функции f() и подобрав подходящие коэффициенты, с помощью этой программы можно строить самые разные графики.
Дата добавления: 2016-09-26; просмотров: 1483;