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

Рисование графиков может осуществляться:
•    С использованием процедуры 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

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

TwitterSEO CommunityВаау!News2.ruChippKoricaSMI2Google BookmarksDiggI.uaЗакладки YandexLinkstoreMyscoopCommunizmRu-marksWebmarksRuspaceLinkomaticKli.kzWeb-zakladkaZakladok.netRedditdeliciousMa.gnoliaTechnoratiSlashdotYahoo My WebБобрДобр.ruMemori.rurucity.comМоёМесто.ruMister Wong

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