Главная » Delphi, Графика, Исходники » Построение графа
Фев
14

Построение графа

Задание:
Создать программу, результатом работы которой будет построение на экране графика функции

[sourcecode]
f(x) = 2sin x-e5 на интервале [0; 25]
[/sourcecode]

Краткий анализ проекта:
Для построения графиков функций используется свойство Pixels объекта Canvas. Например оператор Formal. Canvas. Pixels [10,10]: = clRed; выводит на канву точку с координатами (10,10) красного цвета.
Размер графической плоскости формы определяется значениями свойств ClientWidth и ClientHeight. Левой верхней точке рабочей области соответствует элемент Pixels [0,0], а правой нижней — Pixels [ClientWidth-1, ClientHeight-1].

Скриншот программы:

Построение графа

Построение графа (+\-)


Исходник программы:

[sourcecode language=»delphi»]





unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormPaint(Sender: TObject);
procedure FormCanResize(Sender: TObject; var NewWidth,
NewHeight: Integer; var Resize: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure GrOfFunc;
var
x,y,{аргумент и значение функции}
xl,yl, {[х1; х2] — {отрезок, на котором строится функция}
x2,y2, {[у1; у2 ] — {интервал значения функции}
dx, {прирост функции}
mx,my:real; {масштаб}
l,b,{левый нижний угол области вывода графика}
h,w,{высота и ширина области вывода графика}
x0,y0:integer; {точка начала координат}
function f (x:real):real;
begin
f:=2*sin(x)*exp(x/5);
end;
begin
form1.canvas.pen.color:=clgreen;
l:=10;
b:=Form1.ClientHeight-20; h:=Form1.ClientHeight-40;
w:=Form1.ClientWidth-40;
xl:=0;x2:=25;
dx:=0.001;
yl:=f(xl);y2:=f(x2);
x:=xl;
repeat
y:=f(x);
if y<yl then yl:=y;if y>y2 then y2:=y;
x:=x+dx;
until (x>=x2);
my:=h/abs(y2-yl);mx:=w/abs(x2-xl) {масштабы по координатных осях};
x0:=1;
y0:=b-abs(round(yl*my));
with Form1.Canvas do
begin
Moveto(l,b);lineto(l,b-h-13);
Moveto(x0,y0);lineto(x0+w,y0);
TextOut(1+5,b-h,FloatToStrF(y2,ffgeneral,6,3));
TextOut(1+5,b,FloatToStrF(yl,ffgeneral,6,3));
x:=xl;
repeat y:=f(x);
Form1.Canvas.Pixels [x0 + round(x*mx) , y0 -round(y*my)]:=clblue;
x:=x+dx;
until (x>=x2);
end;
form1.Font.Name:=’arial'; form1.Font.Size:=10;
form1.canvas.Textout(x0+10,y0+5,’y=2*sin(x)*exp(x/5)’);
form1.canvas.Textout(x0+w-5,y0-8,’>’);
form1.canvas.Textout(x0+w-5,y0+5, ‘ X’) ;
form1.canvas.Textout(l-3,b-h-15,’/\ Y’);
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
GrOfFunc;
end;
procedure TForm1.FormCanResize(Sender: TObject; var NewWidth,
NewHeight: Integer; var Resize: Boolean);
begin
Form1.Refresh;
GrOfFunc;
end;
end.
[/sourcecode]

Скачать исходник программы:
[download id=»27″]



Понравилась статья? Сделай приятно ее автору, поделись с друзьями:


Хотите получать обновления данного блога на EMail?

Введите адрес Почтового Ящика:




Подтвердите подписку в письме пришедшем на Почту, после чего начнете получить рассылку.