- •Лабораторная работа 8. Работа с графикой в Delphi
- •Необходимые теоретические сведения для выполнения работы
- •Графический инструментарий Delphi
- •1 Основа графики в Delphi
- •2 Программное рисование
- •3 Построение графиков функций. Преобразование координат
- •3.1 Вывод графика функции на экран
- •3.2 Масштабирование графика
- •3.3 Преобразование координат при построении графика
- •3.4 Порядок построения графика
- •4 Индивидуальные задания
3 Построение графиков функций. Преобразование координат
3.1 Вывод графика функции на экран
Построение графиков функций сопряжено с рядом особенностей использования 2D графики Delphi. Первая особенность состоит в выборе свойств канвы для прорисовки графика. Рисовать на канве можно разными способами. Первый вариант - использовать свойство канвы Pixels. Это свойство представляет собой двумерный массив, который отвечает за цвета канвы. Например, Canvas.Pixels[10,20] - соответствует цвету пикселя с координатами (10,20). Второй вариант - использовать свойство канвы Pen (перо), еще один вариант использовать в качестве точек графика окружности с радиусом 2-3 пикселя.
Вторая особенность построения графиков состоит в том, что точка, имеющая координаты (0,0) находится в верхнем левом углу экрана. Значения координаты по оси y увеличиваются на экране сверху вниз, поэтому, чтобы график функции выглядел на экране так, как привычно, человеческому глазу, необходимо выполнить преобразования координат.
Следующая особенность при построении графиков, так же связана с человеческим восприятием. График должен располагаться по всей площади экрана, отсюда возникает задача масштабирования.
Рассмотрим особенности построения 2D графика функции на примере. Применим для построения графика компонент PaintBox, для преобразования координат x и y используем функции xp и yp, тогда для вывода графика произвольной функции F(x) достаточно написать следующий код:
With PaintBox1.Canvas do
begin
Brush.Color:=ClRed;
Pen.Color:=clRed;
While x<xmax do
begin
Ellipse(xp(x),yp(F(x)),xp(x)+4,yp(F(x))+4);
x:=x+0.01;
end;
end;
Точки графика – окружности красного цвета, диаметром 4 пикселя.
3.2 Масштабирование графика
Очевидно, для построения графика и его масштабирования необходимо знать минимальные и максимальные значения координат x и y. В программе минимальное и максимальное значения x имеют идентификаторы xmin и xmax, эти переменные нужно ввести в начале работы программы. Переменные ymin и ymax (минимальное и максимальное значение y) нужно вычислить, исходя из вида функции F(x). Вычисление можно выполнить с помощью следующей процедуры:
// Вычисление ymin и ymax
procedure min_max;
begin
x:=xmin;
ymax:=-1000;
ymin:=1000;
repeat
y:=F(x);
if y>ymax then ymax:=Y;
if y<ymin then ymin:=Y;
x:=x+0.01;
until x>xmax;
end;
Решаем вопрос с масштабированием. Зная значения xmin, xmax, ymin, ymax, а также высоту Height и ширину Width компонента PaintBox, определим коэффициенты масштабирования dx, по оси Ox и dy по оси Оy, соответствующие действия выполнены в следующем фрагменте программы:
x:=xmin;
if x*xmax>0 then dx:=round(PaintBox1.Width/abs(xmax-x))
else dx:=round(PaintBox1.Width/(abs(xmax)+abs(x)));
dy:=PaintBox1.Height/(ymax-ymin);
Для программирования функций xp и yp, необходимо также, определить точку (a, b) начала координат, при выводе графика, с использованием компонента PaintBox, координаты этой точки определим с помощью следующих операторов присваивания:
a:=PaintBox1.Width div 2;
b:=PaintBox1.Height div 2;