![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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? |