Як намалювати графік

Як намалювати графік

Підкажіть як в Делфі побудувати графік по заданій функціі.І взагалі чи можна це зробити використовуючи стандартні засоби Delphi

см. компонент TChart


> І взагалі чи можна це зробити використовуючи стандартні засоби
> Delphi

звичайно можливо!

> Підкажіть як в Делфі побудувати графік по заданій функції

береш TCavas і малюєш.
Canvas.MoveTo (x, y); пересування в задану точку
Canvas.LineTo (x, y); лінія в задану точку

А можна детальніше а то в Делфі я новачок

Мені потрібно побудувати сінусойду, мені здається Canvas.LineTo не підійде, хоча може я помиляюся


> Мені потрібно побудувати сінусойду, мені здається Canvas.LineTo
> Не підійде, хоча може я помиляюся

Здається - хреститися треба.

Підкажіть де знаходитися компонент TCavas

TCanvas ніколи компонентом ні (і не буде).

як же не підходить.
тобі потрібно розрахувати графік
тобто приблизно так
пересуваєш точку на початку малювання MoveTo
Canvas.MoveTo (0, Canvas.height)
потім в циклі малюєш графік своєї функції
For i: = 0 to 800 do
# XA0; begin # XA0; # XA0; # XA0; # XA0; # XA0; # XA0;
# XA0; Canvas.LineTo (i, Sin (i));
# XA0; end;

Ps. сподіваюся у мене правильно мізки працюють

TCanvas (знову майстра на мене наїдуть) перебувати в Практично будь-якому візуальному компоненті. але краще використовувати PaintBox


> TCanvas (знову майстра на мене наїдуть) перебувати в Практично
> Будь-якому візуальному компоненті. але краще використовувати PaintBox

TCanvas - суть HDC. Є дійсно у багатьох візуальних компонентів (але далеко не у всіх). Не у всіх воно в public.

Неправильно, буде пряма лінія


> Неправильно, буде пряма лінія

ой ну да
Canvas.LineTo (i, Round (Sin (i) * 100));

А якщо все-таки звернутися до TChart?

Аргумент повинен бути в радіанах

викинь chart на форму, натисни два рази прав.кнопкой, натисни add Вибери тип графіка і експериментуй
приклад синуса при появі вікна:

procedure TForm1.FormActivate (Sender: TObject);
var
k: Integer;
begin
for k: = 0 to 20 do
Chartl.SeriesList [0] .AddXY (k, sin (k * pi / 10), "", clRed);
end;

стандартно.

Ось код з DRKB. Малює графік функції.


procedure TForm1.Button3Click (Sender: TObject);
var x, y: array [1..50] of double;
# XA0; i: integer;
# XA0; scalex, scaley, ymin, ymax, xmin, xmax: double;
begin
# XA0; for i: = 1 to 50 do
# XA0; # XA0; begin
# XA0; # XA0; # XA0; y [i]: = sin (i * 0.5);
# XA0; # XA0; # XA0; x [i]: = i;
# XA0; # XA0; end;
# XA0; xmin: = x [1];
# XA0; xmax: = x [1];
# XA0; ymin: = y [1];
# XA0; ymax: = y [1];
# XA0; for i: = 2 to 50 do
# XA0; # XA0; begin // або використовуйте ymin: = MinValue (y); і т.д.
# XA0; # XA0; # XA0; if y [i] # XA0; # XA0; # XA0; if y [i]> ymax then ymax: = y [i];
# XA0; # XA0; # XA0; if x [i] # XA0; # XA0; # XA0; if x [i]> xmax then xmax: = x [i];
# XA0; # XA0; end;
# XA0; scalex: = paintbox1.Width / (xmax - xmin);
# XA0; scaley: = paintbox1.Height / (ymax - ymin);
# XA0; with paintbox1.canvas do
# XA0; # XA0; begin
# XA0; # XA0; # XA0; moveto (trunc (scalex * (x [1] - xmin)), paintbox1.height - trunc (scaley * (y [1] - ymin)));
# XA0; # XA0; # XA0; for i: = 2 to 50 do
# XA0; # XA0; # XA0; # XA0; Lineto (trunc (scalex * (x [i] - xmin)), paintbox1.height - trunc (scaley * (y [i] - ymin)));
# XA0; # XA0; end;
end;

MoveTo / LineTo краще замінити Windows.PolyPolyLine

Пам'ять: 0.75 MB
Час: 0.046 c

Схожі статті