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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2011, 18:44   #1
hunter03
Форумчанин
 
Регистрация: 05.05.2009
Сообщений: 244
По умолчанию Апроксимация, не могу понять ошибку

Здравствуйте! У меня следующая задача:
у меня в компоненте Image загружена картинка с кривой которую нужно апроксимировать Ax+B.
Я считываю в массивы координаты Х и координаты У моей линии
Апроксимация делается по условию таким образом: я ввожу коэффициент апроксимации(например 4), и после апроксимации моя линия представляется в виде 4 линий.
Получается для апроксимации мои массивы нужно разбить на 4 части и в каждой из частей нужно подсчитать Эти формулы:http://piccy.info/view3/2217087/bcfd...7d46cd0421adc/
Пытаюсь сделать так:
Код:
procedure TForm2.Button1Click(Sender: TObject);
var n,i,n1,j:Integer;  h,h1,h2:Real;
  a,b:array[1..20] of integer;
  x,y:array of Integer;
  z,z1:array[1..100] of real;
  s1,s2,s3,s4:Integer;
begin

n:=StrToInt(Form2.Edit1.Text) ;


SetLength(x,Form1.Table1.RecordCount+1);
SetLength(y,Form1.Table1.RecordCount+1);

n1:=1;{считываю массив А и В}
  while n1<=Form1.Table1.RecordCount do begin
  x[n1]:=Form1.Table1.fieldbyname('X').AsInteger;
  y[n1]:=Form1.Table1.fieldbyname('Y').AsInteger;
    Form1.ListBox1.Items.Add(IntToStr(x[n1]));
  n1:=n1+1;  Form1.Table1.Next;
  end;

  h:=Form1.Table1.RecordCount;
  
h2:=h/n;
h2:=Round(h2);

  h1:=h2;
{разделяю массив на n частей}
  z[1]:=1;
  //ShowMessage(floatToStr(Z[1]));
  for i:=2 to n do begin
  z[i]:=h1;
  h1:=h1+h2;
  z1[i]:=z[i]-z[i-1];
  //ShowMessage(floatToStr(z[i]));
  end;
  z[n]:=h;
 // ShowMessage(floatToStr(Z[n]));




  for i:=1 to n-1 do begin
  s1:=0;
  s2:=0;
  s3 := 0;
  s4 := 0;
  for j:=StrToInt(FloatToStr(z[i])) to StrToInt(FloatToStr(z[i+1])) do begin
  s1 := s1 + x[j] * y[j];
  s2 := s2 + x[j];
  s3 := s3 + y[j];
  s4 := s4 + x[j] * x[j];
    end;
 A[i] := Trunc((z1[i] * s1 - s2 * s3) / (z1[i] * s4 - s2 * s2));
  b[i] := Trunc((s3 - n * s2) / z1[i]);

  {if a[i]<0 then a[i]:=a[i]*(-1);
  if b[i]<0 then b[i]:=b[i]*(-1);

     ShowMessage('a='+floatToStr(a[i]));
      ShowMessage('b='+floatToStr(b[i]));  }
       end   ;

         with Form1.image2.canvas do begin
      for i:=1 to n-1 do  begin
lineto(Round(a[i]),Round(b[i]));
  end;
  end;
  end;
Но не получается никак...может посоветуете как сделать или тут можно поправить код? Если нужно могу поргу залить
hunter03 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу понять ошибку.. AvA_Splash Общие вопросы C/C++ 4 22.12.2010 00:24
Не могу понять ошибку alexprey Общие вопросы Delphi 18 26.05.2010 15:38
Не могу понять ошибку Cobro Помощь студентам 0 08.05.2010 17:19
Не могу понять ошибку alex_alpha Общие вопросы C/C++ 5 23.03.2010 19:18
Не могу понять ошибку. KoBRaAndrey Общие вопросы Delphi 2 18.11.2009 19:28