![]() |
|
|
Регистрация | << Правила форума >> | 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
|
||||
|
||||
![]() Цитата:
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#7
|
|||
|
|||
![]() Насколько я понимаю PolyLine соединяет точки, а мне не нужно чтобы точки соединялись. Мне нужно, чтобы прямая строилась по уравнению прямой. То есть у меня в задаче находятся коэффициенты этой прямой по методу наименьших квадратов и мне нужно построить прямую. Вроде просто все, но не получается((
|
#8
|
||||
|
||||
![]() Цитата:
Цитата:
Прямая в программировании и в геометрии несколько отличаются. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#9
|
|||
|
|||
![]() Я старалась все доходчиво объяснить, жаль что мы друг друга не поняли..
|
#10
|
||||
|
||||
![]() Поняли, поняли. Я просто показал несоответствие в сообщениях.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#11
|
||||
|
||||
![]() Цитата:
А чем?? ![]() |
#12
|
||||
|
||||
![]() Хотя бы тем, что она должна быть отрисована визуально. В геометрии это абстракция.
![]() Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |