Технология рисования


Каждая форма в 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; просмотров: 1476;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.