скрыть

скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Google  
 

График функции




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.
Скачать весь проект





Copyright © 2004-2016 "Delphi Sources". Delphi World FAQ




Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook