|  | 
 
 | 
| 
 | |||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
|  | 
|  | Опции темы | Поиск в этой теме | Опции просмотра | 
| 
			 
			#1  
			
			
			
			
		 | |||
| 
 | |||
|  Нарисовать линию по коэффициентам Доброго времени суток, уважаемые программисты! Такая проблема - не могу найти в делфи функцию, которая бы рисовала прямую по коэффициентам. У меня задача состоит в построении прямой по методу наименьших квадратов. Все работает, кроем построения самой прямой(( Подскажите как решить.... Вот код Код: unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Series, TeEngine, TeeProcs, Chart, ExtCtrls, StdCtrls, Math;
type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Chart1: TChart;
    Series1: TPointSeries;
    Series2: TLineSeries;
    LabeledEdit1: TLabeledEdit;
    Button1: TButton;
    Label1: TLabel;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
var D: array of real;
  ReadOk: boolean;
  ff: textfile;
  {$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
  if Form1.OpenDialog1.Execute then
    Form1.LabeledEdit1.Text := Form1.OpenDialog1.FileName;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
  i, n: LongWord;
  a,b,sx,sxx,sxy: real;
begin
  ReadOk := true;
  SetLength(D, 0);
  Try
    AssignFile(ff, Form1.LabeledEdit1.Text);
    Reset(ff);
    Try
      while not(EOF(ff)) do
      begin
        SetLength(D, Length(D)+1);
        readln(ff, D[Length(D)-1]);
      end;
    finally
      CloseFile(ff);
    end;
  except
    ReadOk := false;
  end;
  if ReadOk then
  begin
    sx := 0;
    sxx := 0;
    sxy := 0;
    n := Length(D);
    for i := 1 to n do
    begin
      sx := sx + D[i];
      sxx := sxx + D[i]*D[i];
      sxy := sxy + D[i]*i;
    end;
    a := (sxy - 1)/(sxx - sx*sx/n);
    b := 1 - sx/n*a;
    Form1.Label1.Caption := 'y = '+floattostr(RoundTo(a,-2))+' x + '+floattostr(RoundTo(b,-2));
  end
  else
    Form1.Label1.Caption := 'Ошибка загрузки данных';
end;
procedure TForm1.Button3Click(Sender: TObject);
var
  i, n: LongWord;
begin
  n := Length(D);
  for i:=0 to (n div 2) - 1 do begin
      Form1.Chart1.Series[0].AddXY(D[i*2],D[i*2+1]);
  end;
end;
procedure TForm1.Button4Click(Sender: TObject);  //это пробный вариант, ну и похоже бредовый
var
 a,b : Real;
 m : Integer;
begin
  for m:= -20 to 20 do
  begin
    Chart1.Series[2].AddXY(m,m*a+b);
  end;
end;
end. | 
| 
			 
			#2  
			
			
			
			
		 | |||
| 
 | |||
|   А чем тебе твой вариант не нравится? | 
| 
			 
			#3  
			
			
			
			
		 | |||
| 
 | |||
|   Так мой вариант линию не чертит(( А мне нужно, чтобы чертил по коэффициентам... | 
| 
			 
			#4  
			
			
			
			
		 | |||
| 
 | |||
|   Сделай массивы а, b, c и передавай их в процедуру рисования. | 
| 
			 
			#5  
			
			
			
			
		 | |||
| 
 | |||
|   А что в эти массивы помещать??? Я не понимаю как-то... | 
| 
			 
			#6  
			
			
			
			
		 | ||||
| 
 | ||||
|   Цитата: 
 | 
| 
			 
			#7  
			
			
			
			
		 | |||
| 
 | |||
|   Насколько я понимаю PolyLine соединяет точки, а мне не нужно чтобы точки соединялись. Мне нужно, чтобы прямая строилась по уравнению прямой. То есть у меня в задаче находятся коэффициенты этой прямой по методу наименьших квадратов и мне нужно построить прямую. Вроде просто все, но не получается(( | 
| 
			 
			#8  
			
			
			
			
		 | ||||
| 
 | ||||
|   Цитата: 
 Цитата: 
 Прямая в программировании и в геометрии несколько отличаются. | 
| 
			 
			#9  
			
			
			
			
		 | |||
| 
 | |||
|   Я старалась все доходчиво объяснить, жаль что мы друг друга не поняли.. | 
| 
			 
			#10  
			
			
			
			
		 | ||||
| 
 | ||||
|   Поняли, поняли. Я просто показал несоответствие в сообщениях. | 
| 
			 
			#11  
			
			
			
			
		 | ||||
| 
 | ||||
|   Цитата: 
 А чем??  | 
| 
			 
			#12  
			
			
			
			
		 | ||||
| 
 | ||||
|   Хотя бы тем, что она должна быть отрисована визуально. В геометрии это абстракция.   | 
| 
			 
			#13  
			
			
			
			
		 | ||||
| 
 | ||||
|   Цитата: 
 Какая абстракция, вообще причем тут абстракция. Линия она и в Африке линия, точно так же как и геометрии и программировании. | 
| 
			 
			#14  
			
			
			
			
		 | ||||
| 
 | ||||
|   Да ну? Интересно, какая линия между Землёй и Луной - наверно толстая, канат. Но это всё оффтоп, желающие за школьную парту по-новой. | 
| 
			 
			#15  
			
			
			
			
		 | |||
| 
 | |||
|   Товарищи... помогаем девушке, давайте ) Покажите вашу главную "мышцу" )) Вопрос к автору: что в массиве D? |