Показать сообщение отдельно
Старый 27.07.2010, 22:01   #2 (permalink)
artes33
Member
 
Регистрация: 26.07.2010
Сообщений: 22
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 60
По умолчанию

Нельзя решить функцию, можно подсчитать ее значение при заданных аргументах. А программу будем делать так: рисовать будет прямо на канве формы, для удобства возьмем самый естественный в данной ситуации масштаб: 1 ед. = 1 пиксель. Так проще. Начнем! Кидай на форму 1 TButton и 2 TLabeledEdit. Желательно разместить их в одном углу формы, чтобы потом не очень мешались. Надпись к LabeledEdit1 - "k", к LabeledEdit2 - "b". к едитам в OnKeyPress пиши:
Код:
  case key of
    '0'..'9', '-', #8:;
      else key := #0;
  end;
Это чтобы лишнего не вводили. В обработчике кнопки:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  W, H : cardinal;
  halfW, halfH, x, y : double;
  ixPrev, iyPrev, k, b : integer;
  ix, iy : cardinal;
begin
  repaint;
  W := Form1.Width;
  H := Form1.Height;
  k := StrToIntDef(Form1.LabeledEdit1.Text, 0);
  b := StrToIntDef(Form1.LabeledEdit2.Text, 0);
  halfW := W / 2;
  halfH := H / 2;
  Form1.Canvas.MoveTo(round(halfW), 0);
  Form1.Canvas.LineTo(round(halfW), H);
  Form1.Canvas.MoveTo(0, round(halfH));
  Form1.Canvas.LineTo(W, round(halfH));
  ixPrev := 0;
  iyPrev := round(halfH);
    for ix := 0 to W - 1 do
    begin
      x := (ix - halfW);
      y := k * x + b;
      iy := round(halfH - y);
      Form1.Canvas.MoveTo(ixPrev, iyPrev);
      Form1.Canvas.LineTo(ix, iy);
      ixPrev := ix;
      iyPrev := iy;
    end;
end;
В принципе y = kx + b можно решить и легче, но, как я понял, будут другие функции. Функцию задавать при присвоение значение переменной игрек: y := k * x + b;. ВАЖНО: т.к. масштаб 1 пиксель, то сложно будет отличить y = 3x + 2 и y = 3x + 3. Чтобы глаз человека мог это воспринимать надо либо увеличивать на десятки: y = 3x + 20 и y = 3x + 30, либо добавить в программу работу с масштабом иным.
artes33 вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070