График функции
unit grfunc_;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
procedure FormPaint(Sender: TObject);
procedure FormResize(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
// Функция, график которой надо построить
function f(x: real): real;
begin
f := 2 * Sin(x) * exp(x / 5);
end;
// строит график функции
procedure GrOfFunc;
var
x1, x2: real; // границы изменения аргумента функции
y1, y2: real; // границы изменения значения функции
x: real; // аргумент функции
y: real; // значение функции в точке x
dx: real; // приращение аргумента
l, b: integer; // левый нижний угол области вывода графика
w, h: integer; // ширина и высота области вывода графика
mx, my: real; // масштаб по осям X и Y
x0, y0: integer; // точка - начало координат
begin
// область вывода графика
l := 10; // X - координата левого верхнего угла
b := Form1.ClientHeight - 20; // Y - координата левого верхнего угла
h := Form1.ClientHeight - 40; // высота
w := Form1.Width - 40; // ширина
x1 := 0; // нижняя граница диапазона аргумента
x2 := 25; // верхняя граница диапазона аргумента
dx := 0.01; // шаг аргумента
// найдем максимальное и минимальное значения
// функции на отрезке [x1,x2]
y1 := f(x1); // минимум
y2 := f(x1); // максимум
x := x1;
repeat
y := f(x);
if y < y1 then y1 := y;
if y > y2 then y2 := y;
x := x + dx;
until (x >= x2);
// вычислим масштаб
my := h / abs(y2 - y1); // масштаб по оси Y
mx := w / abs(x2 - x1); // масштаб по оси X
// оси
x0 := l;
y0 := b - Abs(Round(y1 * my));
with form1.Canvas do
begin
// оси
MoveTo(l, b); LineTo(l, b - h);
MoveTo(x0, y0); LineTo(x0 + w, y0);
TextOut(l + 5, b - h, FloatToStrF(y2, ffGeneral, 6, 3));
TextOut(l + 5, b, FloatToStrF(y1, ffGeneral, 6, 3));
// построение графика
x := x1;
repeat
y := f(x);
Pixels[x0 + Round(x * mx), y0 - Round(y * my)] := clRed;
x := x + dx;
until (x >= x2);
TextOut(17, 100, 'Delphi World Example');
end;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
GrOfFunc;
end;
// изменился размер окна программы
procedure TForm1.FormResize(Sender: TObject);
begin
// очистить форму
form1.Canvas.FillRect(Rect(0, 0, ClientWidth, ClientHeight));
// построить график
GrOfFunc;
end;
end.
Скачать весь проект
|