суббота, 16 октября 2010 г.

Лабораторная работа №3

Тема: График функции в среде Lazarus

Цель: Разработать алгоритм и программу решения прикладной задачи – построение графика заданной функции. Научиться переводить декартовые координаты в экранные.


Задание:
Построить график функции y = Ax2 + Bx + C в диапазоне ( x min, y min ) – ( x max, y max ). Постоянные А, В, С, x min , y min , x max , y max вводятся через пользовательский интерфейс.


Математическая модель решения задачи:

y = Ax2 + Bx + C


Преобразование стандартных координат в экранные:

kx= Image1.Width/(xmax-xmin) //
коэффициент масштабирования по оси Ox
ky= Image1.Height/(ymax-ymin)
//
коэффициент масштабирования по оси Oy

xsc= (xmin- x)*kx //экранная координата x
ysc= Image1.Height – (y - ymin )*ky
//экранная координата y


Программа:




Код программы:

procedure TForm1.DrawClick(Sender: TObject);

var h, w, i, xsc, ysc, n, x, y, xmin, xmax, ymin, ymax, ox, oy: integer;
kx, ky, av, bv,cv: real;
begin
Val(Edit1.Text, av);
Val(Edit2.Text, bv);
Val(Edit3.Text, cv);
Val(Edit4.Text, xmin);
Val(Edit5.Text, xmax);
Val(Edit6.Text, ymin);
Val(Edit7.Text, ymax);

h:=Image1.Height;
w:=Image1.Width;

Image1.Canvas.Rectangle(0 ,0, w, h);

kx:= w/(xmax-xmin);
ky:= h/(ymax-ymin);

x:=xmin;
n:=xmax-xmin;

Image1.canvas.MoveTo(xmin,10);
for i:=0 to n do
begin
y:= round(av*x*x+bv*x+cv);
xsc := round((x - xmin)*kx);
ysc := round(h - (y - ymin)*ky);
Image1.Canvas.LineTo(xsc,ysc);
x:=round(x+kx);
end;
ox:=round(-xmin*kx);
oy:=round(-ymin*kx);
Image1.Canvas.Pen.Color := clGreen;
Image1.canvas.MoveTo(ox,0);
Image1.canvas.LineTo(ox,h);
Image1.canvas.MoveTo(0,oy);
Image1.canvas.LineTo(w,oy);
Image1.Canvas.Pen.Color := clBlack;

end;

Комментариев нет:

Отправить комментарий