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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2009, 18:57   #1
Bilargo
Форумчанин
 
Аватар для Bilargo
 
Регистрация: 17.09.2009
Сообщений: 231
По умолчанию График функции.

Имеется график функции:
Код:
procedure TForm1.FormDblClick(Sender: TObject);
var x,y:double;
cx,cy:integer;
begin
 x:=-20;
 cx:=220;
 cy:=300;
 with Canvas do begin
   Pen.Color:=clRed;
   Pen.Width:=2;
   MoveTo(cx,cy);
   while x<20 do begin
    y:=5*cos(x)*exp(-x/5);
    LineTo(cx+Round(x*10),cy+round(y));
    x:=x+1;
   end;
 end;
При выполнении процедуры график выдает лишнюю вертикальную линию, по крайней мере мне препод так сказал, может кто знает, что не так?
И вообще он посоветовал привести к виду определения масштаба через пиксели, я если честно не очень понял, что он имел ввиду. Есть пример из лекции, но не могу разобраться.

Код:
procedure TForm1.FormPaint(Sender: TObject);
var  x1, x2, y1, y2, x, y, dx, mx, my : real;
       left, bottom, w, h, x0, y0 : integer;
begin
  left := 10;  bottom := Form1.ClientHeight-20;
  w := Form1.ClientWidth-40;  h := Form1.ClientHeight-40;
  x1:= 0; x2:= 25;
  dx:= 0.01;

  y1 := f(x1);  y2 := f(x1);  x := x1;
  repeat
     y:= f(x);
     if  y<y1  then  y1:= y;
     if  y>y2  then  y2:= y;
     x:= x+dx
  until  x >= x2;
  mx:= w/abs(x2-x1);  my:= h/abs(y2-y1);
  x0:= left;  y0:= bottom-abs(round(y1*my));
  with  Form1.Canvas  do
    begin
      MoveTo(left, bottom);  LineTo(left, bottom-h);
      MoveTo(x0, y0);  LineTo(x0+w, y0);
      TextOut(left+5, bottom-h, FloatToStrF(y2, ffFixed, 4, 2));
      TextOut(left+5, bottom, FloatToStrF(y1, ffFixed, 4, 2));
      x:= x1;
      repeat
        y:= f(x);
        Pixels[x0+round(x*mx), y0-round(y*my)]:= clRed;
        x:= x+dx
      until x>=x2;
    end;
end;
Цитата:
Относись к людям так, как хочешь, чтоб относились к тебе!
Bilargo вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
График функции balamut Общие вопросы .NET 18 22.04.2016 11:11
График функции russian-stalker Общие вопросы Delphi 2 30.09.2009 14:58
График функции Леха Общие вопросы Delphi 18 16.04.2007 20:50