Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2010, 16:27   #1
Misty
 
Регистрация: 24.05.2009
Сообщений: 4
Вопрос Наложение графиков

Здравствуйте, уважаемые форумчане.

Такой вопрос: при помощи чего можно осуществить наложение графиков, т.е. чтобы на одной системе координат отображались сразу два графика,
например, как на этом рисунке
http://www.optimization.ru/images/op...007-line-1.gif

вот код программы, которую я хочу доработать:

Код:
unit grafik01;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Label1: TLabel;
    Button1: TButton;
    CheckBox1: TCheckBox;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var

  Form1: TForm1;

procedure gr;


implementation

uses grafik02;

{$R *.dfm}

const
    COLCOUNT = 15;
var
    x: array[1..COLCOUNT] of real;
    y: array[1..COLCOUNT] of real;

procedure gr;
var
    i: integer;
    x1,x2:real;
    y1,y2:real;
    l,b:integer;
    w,h:integer;
    mx,my:real;
    x0,y0:integer;
    px,py: integer;
    np: integer;

begin
 Form2.Canvas.Rectangle(0,0,Form2.ClientWidth,Form2.ClientHeight);
 l:=10;
 b:=Form2.ClientHeight-20;
 h:=Form2.ClientHeight-40;
 w:=Form2.Width-40;
 x1:=x[1];
 i:=1;
 while (x[i+1] > x[i]) and (i < COLCOUNT) do
          i:= i+1;
 x2:= x[i];
 np:=i;

 if np < 2 then begin
    ShowMessage('Количество точек графика не может быть меньше двух');
    exit;
 end;

 y1:=0;
 y2:=0;
 for i:=1 to np do
 begin
   if y[i] < y1 then y1:=y[i];
   if y[i] > y2 then y2:=y[i];
 end;

 my:=h/abs(y2-y1);
 mx:=w/abs(x2-x1);
 x0:=l+Abs(Round(x1*mx));
 y0:=b-Abs(Round(y1*my));

 with form2.Canvas do
 begin
   MoveTo(x0,b);LineTo(x0,b-h);
   MoveTo(l,y0);LineTo(l+w,y0);
   TextOut(l+5,b-h,FloatToStrF(y2,ffGeneral,6,3));
   TextOut(l+2,b+2,FloatToStrF(y1,ffGeneral,6,3));

   for i:=1 to np do
   begin
      px := x0+Round(x[i]*mx);
      py := y0-Round(y[i]*my);

      Form2.Canvas.Pen.Color := clRed;
      Rectangle(px-2,py-2,px+2,py+2);

      if Form1.CheckBox1.Checked then
        if i = 1
          then MoveTo(px,py)
          else LineTo(px,py);

      Form2.Canvas.Pen.Color := clBlack;
      TextOut(px-5,py-15,FloatToStr(y[i]));
      TextOut(px-5,y0+2, FloatToStr(x[i]));
      MoveTo(px,py);

   end;
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
    i: integer;
begin
    StringGrid1.ColCount := COLCOUNT;

    StringGrid1.Cells[0,0] := '  X';
    StringGrid1.Cells[0,1] := '  Y';

    for i:=1 to COLCOUNT do
    begin
        StringGrid1.Cells[i,0] := IntToStr(i-1);
        StringGrid1.Cells[i,1] := IntToStr(i-1);
    end;

end;

procedure TForm1.Button1Click(Sender: TObject);
var
    i: integer;
begin
    for i:=1 to COLCOUNT-1 do
    begin
        x[i] := StrToFloat(Form1.StringGrid1.Cells[i,0]);
        y[i] := StrToFloat(Form1.StringGrid1.Cells[i,1]);
    end;
    if not Form2.Showing
        then Form2.Show
        else Form2.Repaint;
end;
end.
Misty вне форума Ответить с цитированием
Старый 19.03.2010, 16:31   #2
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Вот почитайте,попробуйте,если возникнут вопросы-задавайте.
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 19.03.2010, 17:33   #3
Misty
 
Регистрация: 24.05.2009
Сообщений: 4
По умолчанию

Спасибо за совет)

Последний раз редактировалось Misty; 19.03.2010 в 18:13.
Misty вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
наложение картинок wolf950 HTML и CSS 6 28.08.2011 15:08
Наложение ВИДЕО vev1979 Софт 1 08.01.2010 12:55
Наложение кампонента beemoto Общие вопросы Delphi 7 25.05.2009 21:36
Наложение растров EdNovice Win Api 3 20.02.2008 07:44