Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.07.2011, 13:53
AnderoN AnderoN вне форума
Прохожий
 
Регистрация: 18.02.2011
Сообщения: 31
Репутация: 10
По умолчанию Построение графика в Image (по принятым значениям)

Всем доброе время суток, помогите пожалуйста.
Есть программа, которая рисует график в поле Image, вот код процедуры, которая осуществляет построение:

Код:
Type TFunc = function (x: real): real;

procedure DrawGraph (f: TFunc; a: real; b: real; C: TCanvas);

var x, y, h: real;

    max, min: real;

    sx, sy: real;

    xmid, ymid: integer;

begin

 sx := (c.ClipRect.Right)/(b-a);

 h := 1/sx;

 xmid := c.ClipRect.Right div 2;

 ymid := c.ClipRect.Bottom div 2;

 x := a;

 max := f( x);

 min := max;

 while x<=b do

   begin

     y := f( x);

     if y<min then min := y;

     if y>max then max := y;

     x := x + h;

   end;

  sy := c.ClipRect.Bottom/ (max-min);

  c.Brush.Color := clBlack;

  c.FillRect(Rect(0, 0, c.ClipRect.Right, c.ClipRect.Bottom));

  c.Pen.Color := clYellow;

  c.MoveTo(0, ymid);

  c.LineTo(c.ClipRect.Right, ymid);

  c.MoveTo(xmid, 0);

  c.LineTo(xmid, c.ClipRect.Bottom);

  x := a;

  y := f(x);

  c.Pen.Color := clWhite;

  c.MoveTo(xmid+round(sx*x), ymid-round(sy*y));

  while x<=b do

    begin

      y := f(x);

      c.LineTo(xmid+round(sx*x), ymid-round(sy*y));

      x := x + h;

    end;

end;

А вот сама программа, которая использует выше упомянутую процедуру построения графика:

Код:
Function f(x: real): real;

 begin

   Result := sin(x)*cos(x);

 end;

 

procedure TForm1.Button1Click(Sender: TObject);

 begin

   DrawGraph (f, -10, 10, Image1.Canvas);

 end;


При нажатии на кнопку мы получаем график, который указан в function f(x:real), в данном случае это sin(x)*cos(x).

Мне же необходимо, чтобы график строился по точкам ( то есть я не задаю функцию формулой, а у меня после некоторых измерений на компьютер приходит набор точек, если быть точнее значения амплитуды в зависимости от градусов поворота установки). Подскажите пожалуйста, как сделать, чтобы не забивать функцию, а при нажатии на кнопку график строился по точкам?
Ответить с цитированием
  #2  
Старый 07.07.2011, 14:09
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

Ну тебе надо вместо функции передавать массив твоих точек и уже с ним работать
Ответить с цитированием
  #3  
Старый 08.07.2011, 13:10
AnderoN AnderoN вне форума
Прохожий
 
Регистрация: 18.02.2011
Сообщения: 31
Репутация: 10
По умолчанию

Я так понимаю у меня должно быть два массива? Один точек по оси Х, другой по оси У? Я там где функция примерно разобрался что к чему, а вот как сделать чтоб массив вместо функции задать не понимаю, покажите пожалуйста как это сделать на примере рандомного массива и по Х и по У, если нетрудно
Ответить с цитированием
  #4  
Старый 08.07.2011, 13:33
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

Код:
 type
  TCoord = record
   x, y: real;
  end;

 TPoints = array of TCoords;

И передаешь в процедуру вместо функции:

Код:
 procedure DrawGraph (var mass: TPoints; a: real; b: real; C: TCanvas);

Забить массив можно так:

Код:
 function Coord(x, y: real): TCoord;
 begin
  result.x := x;
  result.y := y;
 end;
 
 function getPoints: TPoints;
 var
  x: integer; //лучше real, но код немного другой будет
  Ps: TPoints;
 begin
 SetLength(Ps, 0);
  for x := -100 to 100 do begin
   SetLength(Ps, Length(Ps) + 1);
   Ps[High(Ps)] := Coord(x, f(x)); //f(x) - твоя функция
  end;
 Result := Ps;
 end;

Или еще можно значения брать из файла.
Ответить с цитированием
  #5  
Старый 08.07.2011, 13:46
AnderoN AnderoN вне форума
Прохожий
 
Регистрация: 18.02.2011
Сообщения: 31
Репутация: 10
По умолчанию

Спасибо, но у меня нету функции, мне надо для рандомных Х, чтобы были рандомные У и строился график
Ответить с цитированием
  #6  
Старый 08.07.2011, 13:56
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

Типа код должен обладать телепатическими способностями и узнавать значения y по x без функции? Такого даже мой декан не может...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:54.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter