Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Работа с графикой лаб9_new.doc
Скачиваний:
12
Добавлен:
26.09.2019
Размер:
392.19 Кб
Скачать

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;