ПОСТРОЕНИЕ ГРАФИКОВ ФУНКЦИЙ В БЕСПЛАТНЫХ СРЕДАХ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ

Раздел: Разработка методического обеспечения

Журнал: Объектно-ориентированное программирование

16 июня 2014 г.

Авторы: Буяковская Ирина Александровна

И. А. Буяковская

ПОСТРОЕНИЕ ГРАФИКОВ ФУНКЦИЙ В БЕСПЛАТНЫХ СРЕДАХ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ

Раздел программирования, в котором рассматриваются принципы построения графиков функций включает три категории задач на построение графика функции, заданного в явном виде, в параметрическом виде и в полярных координатах. Общие подходы, применяемые при решении такого рода задач сходно реализуются в средах объектно-ориентированного программирования Lazarus и Gambas. Отличительные особенности программного кода, в данном случае, обусловлены синтаксисом и компонентами, применяемыми при разработке оконного приложения.

В среде Lazarus используются компоненты, обладающие свойством Canvas, а сам компонент рассматривается как прямоугольная сетка, состоящая из отдельных точек. Свойством Canvas обладают такие компоненты как: форма (класс Tform), область рисования (класс TpaintBox), растровая картинка (класс Timage), панель (класс Tpanel).

Рассмотрим пример построения графика функции непосредственно на форме в среде Lazarus, заданного в параметрическом виде, где


Рис. 1. График функции в среде Lazarus

На форме разместим две кнопки класса Tbutton из вкладки Standard. Построение графика будет осуществляться по нажатию на кнопку (“Построение”). Программный код которой приведем ниже:

procedure TForm1.Button1Click(Sender: TObject);

var r, d, x01, y01 :integer;

     t,x,y:real;

begin

   r:=30; // Задаем значение переменной, отвечающей за масштабирование графика функции.

   d:=10; //  Задаем длину направляющих стрелок декартовой системы координат.

   x01:=Form1.Width div 2; // Определим начало координат.

   y01:=Form1.Height div 2;

   Form1.Canvas.Line(0,y01,x01*2,y01); // Построим ось абсцисс.

   Form1.Canvas.Line(x01,0,x01,y01*2); // Построим ось ординат.

   Form1.Canvas.Line(x01,0,x01+d,d); //Построим направляющие для оси оридинат.

   Form1.Canvas.Line(x01,0,x01-d,d);

   Form1.Canvas.Line(x01*2,y01,x01*2-d,y01+d); //Построим направляющие для оси абсцисс.

   Form1.Canvas.Line(x01*2,y01,x01*2-d,y01-d);

   Form1.Canvas.TextOut(x01-d,d*2,'Y'); // Подпишем оси и начало координат.

   Form1.Canvas.TextOut(x01*2-d*2,y01+d,'X');

   Form1.Canvas.TextOut(x01-d*2,y01+d,'0');

   t:=-10; // Зададим начальное значение параметра.

   While t<=10  do

   begin

      x:=r*(t-sin(t)); // Определим коорднату точки кривой, заданной в параметрическом представлении.

      y:=-r*(1-cos(t));

      t:=t+0.01; // Увеличим значение параметра с шагом 0,01.

      Form1.Canvas.Pixels[trunc(x01+x),trunc(y01+y)]:=clred; //Построим точку красного цвета с вычисленными координатами.

   end;

end;

Теперь рассмотрим пример построения графика функции в среде Gambas, заданного явно, где . Для этого на форме разместим компонент DrawingArea из вкладки Container.


Рис. 2. График функции в среде Gambas

PUBLIC SUB Button1_Click()

DIM d AS Byte

DIM x0, y0, x, y, t, r AS Single

   r = 50

   d = 10

   Draw.Begin(DrawingArea1)

   x0 = Draw.Width DIV 2

   y0 = Draw.Height DIV 2

   Draw.ForeColor = Form.Background

   Draw.Line(0, y0, x0*2, y0)

   Draw.Line(x0, 0, x0, y0*2)

   Draw.Line(x0, 0, x0 - d, d)

   Draw.Line(x0, 0, x0 + d, d)

   Draw.Line(x0*2, y0, x0*2 - d, y0 - d)

   Draw.Line(x0*2, y0, x0*2 - d, y0 + d)

   Draw.Text("y", x0 - 2 * d, 2 * d)

   Draw.Text("x", x0*2 - 2 * d, y0 + 2 * d)

   Draw.Text("0", x0 - 2 * d, y0 + 2 * d)

   draw.ForeColor = Color.Red

   FOR x = -20 TO 20 STEP 0.001

     y = y0 - r * ((x - 4) / Sqr((x ^ 2 + 2)))

     Draw.Point(Round(x0 + x * r), Round(y))

   NEXT

   Draw.End

END

PDF