Рисование графиков функций

Рисование графиков может осуществляться:
•    С использованием процедуры LineTo(x,y) рисования отрезков линий.
•    С использованием рисования точек.
•    С использованием компонента TChart.
При рисовании линиями порядок действий:
•    Для точек графика в цикле по координате x вычисляются значения функции y(x).
•    Процедурой MoveTo(x,y) указатель размещается в начальной точке.
•    В цикле процедурами LineTo(x,y) рисуются отрезки линий, набор которых аппроксимирует график функции.
При рисовании точек порядок действий:
•    Для точек графика в цикле по координате x вычисляются значения функции y(x).
•    В цикле точки графика рисуются с использованием выражения Pixels[x,y]:=<цвет>.
В обоих случаях при необходимости выполняются сопутствующие операции:
•    Анализируется диапазон изменения функции для автомасштабирования.
•    Отображаются координатные оси, сетка и поясняющие надписи.
•    Осуществляется перерисовка при изменении размеров окна формы.
При крупном шаге изменения аргумента рисование линиями обычно дает график более наглядный.
Рассмотрим проект приложения под Windows с именем graf_function_1_., обеспечивающий рисование точками и линиями графика функции синуса.
unit graf_function_1_;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation

procedure TForm1.Button1Click(Sender: TObject);
var i,amp,x01,y01,x02,y02,imax,dt1,dt2,func:integer;
begin
imax:=100;                                    // число точек в периоде
dt1=2;                                             // цена деления X
dt2=2;                                             // шаг во времени
amp:=70;                                         // амплитуда
x01:=20;                                         // начала координат
x02:=20;
y01:=20+amp;
y02:=y01+2*amp+40;
// Рисуем график с Pixels
Canvas.TextOut(0,0,’График функции с Pixels’);
Canvas.MoveTo(x01,y01);                    //Рисуем ось X
Canvas.LineTo(x01+imax*dt1,y01);
Canvas.MoveTo(x01,y01+amp);         //Рисуем ось Y
Canvas.LineTo(x01,y01-amp);
for i:=0 to imax do                         //Рисуем график
begin
func:=-round(amp*sin(2*pi/imax*i*dt2));
Canvas.Pixels[x01+i*dt1,y01+func]:=clBlack;
end;
// Рисуем график с LineTo
Canvas.TextOut(0,y02-amp-20,’График функции с LineTo’);
Canvas.MoveTo(x02,y02);                    //Рисуем ось X
Canvas.LineTo(x02+imax*dt1,y02);
Canvas.MoveTo(x0,y0+amp);             //Рисуем ось Y
Canvas.LineTo(x02,y02-amp);
for i:=0 to imax do                         //Рисуем график
begin
func:=-round(amp*sin(2*pi/imax*i*dt2));
Canvas.LineTo[x02+i*dt1,y02+func]:=clBlack;
end;

end;
initialization
{$I graf_function_1.lrs}
end.
Графики зависят от цены деления по оси X dt1 и шага во времени dt2.

pascal79

При большом шаге в первом графике просматривается точечная структура графика. При большом шаге лучше использовать рисование графика функции линиями.

Twitter SEO Community Ваау! News2.ru Chipp Korica SMI2 Google Bookmarks Digg I.ua Закладки Yandex Linkstore Myscoop Communizm Ru-marks Webmarks Ruspace Linkomatic Kli.kz Web-zakladka Zakladok.net Reddit delicious Ma.gnolia Technorati Slashdot Yahoo My Web БобрДобр.ru Memori.ru rucity.com МоёМесто.ru Mister Wong

Copyright © 2009-2010 Программирование на паскале.