Показать сообщение отдельно
  #2  
Старый 22.09.2010, 05:03
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Как-то примерно так:
Код:
uses Math;

procedure TForm1.Button1Click(Sender: TObject);
var
  A, B : Array Of Extended;
  I : Integer;
  J : Extended;
  mX, mY, xX, xY, dX, dY : Extended;
  kX, kY : Extended;
begin
  SetLength(A,0);
  SetLength(B,0);
  J := -5;
  While J < 5 Do
    begin
      SetLength(A,Length(A)+1);
      A[High(A)] := J;
      SetLength(B,Length(B)+1);
      B[High(B)] := J*J;
      J := J + 0.1;
    end;

  // Проверяем длинну массивов.
  If (Length(A) <> Length(B)) Or (Low(A) <> Low(B)) Then
    Raise Exception.create('Массивы не равны.');

  // Рассчитываем коэф. для отрисовки.
  mX := 0; mY := 0; xX := 0; xY := 0;
  For I := Low(A) To High(A) Do
    Begin
      mX := Min(mX,A[i]);
      mY := Min(mY,B[i]);
      xX := Max(xX,A[i]);
      xY := Max(xY,B[i]);
    End;
  dX := Abs(xX - mX) + 1;
  dY := Abs(xY - mY) + 1;
  kX := Image1.Width / (2*dX) ;
  kY := Image1.Height / (2*dY) ;
  // Выравниваем коэф по мин.
  kX := Min(kX,kY);
  kY := Min(kX,kY);
  dX := (Image1.Width / 2);
  dY := (Image1.Height / 2);

  // Теперь рисуем
  With Image1.Canvas Do
    Begin
      Pen.Color := clBlack;
      MoveTo(Round(kX*A[Low(A)] + dX), Round(dY - kY*B[Low(B)]));
      For I := Low(A) + 1 To High(A) Do
        LineTo(Round(kX*A[i] + dX), Round(dY - kY*B[i]));
    End;
end; 
Ответить с цитированием