Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Нарисовать график [D3, D6, Win95/98]


anod ©   (2002-03-16 22:37:00) 

Подскажите, нужно нарисовать график в PaintBox.
var a,b:integer; sh,x,y:real;
begin
x:=a;
a:=StrToInt(Edit1.Text);
b:=StrToInt(Edit2.Text);
sh:=(b-a)/50;
while (x<>b) do
begin
y:=10/(1+sqr(x));
PaintBox1.Canvas. <-- Что писать?
x:=x+sh;
end;
end;


Я видел мельком пример, там отображалось на Form1.canvas,
приводили к определенному виду, для этого использовали Pi, я это не запомнил.


MBo   (2002-03-17 09:44:00) [1]

procedure TForm1.Button3Click(Sender: TObject);
var x,y:array[1..50] of double;
i:integer;
scalex,scaley:double;
ymin,ymax,xmin,xmax:double;
begin
for i:=1 to 50 do begin
y[i]:=sin(i*0.5);
x[i]:=i;
end;
xmin:=1;
xmax:=50;
ymin:=y[1];
ymax:=y[1];
for i:=2 to 50 do begin
if y[i]<ymin then ymin:=y[i];
if y[i]>ymax then ymax:=y[i];
end;
scalex:=paintbox1.Width/(xmax-xmin);
scaley:=paintbox1.Height/(ymax-ymin);
with paintbox1.canvas do begin
moveto(trunc(scalex*(x[1]-xmin)),paintbox1.height-trunc(scaley*(y[1]-ymin)));
for i:=2 to 50 do
Lineto(trunc(scalex*(x[i]-xmin)),paintbox1.height-trunc(scaley*(y[i]-ymin)));
end;
end;


anod   (2002-03-17 09:17:00) [2]

2MBo

Как я понял skale, это то, что у меня дано в условии и = 50

А base?
Выводить на график нужно xgraf.
Также надо высчитать ygraf


MBo   (2002-03-17 06:50:00) [3]

общее правило
нужно выполнить линейное преобразование
дано xmin,xmax - пределы вх. данных
x1,x2 - нач. и кон. точки на графике (целые, скорее всего 0 и Width)
xmin*scale+base=x1
xmax*scale+base=x2
решаем
scale=(x2-x1)/(xmax-xmin)
base=x1-xmin*(x2-x1)/(xmax-xmin)
итого
xgraf=x1+round((x-xmin)*scale)
scale считаем до цикла

так же для y, не забывая об инверсии шкалы (ymin в height)


anod   (2002-03-16 22:58:00) [4]

Вот это мне и не понятно как сделать
В каком смысле отмаштобировать по размерам окна, и как перевести в Integer, а дробная часть?


Song   (2002-03-16 22:42:00) [5]

Да, забыл, нужно отмасштабировать по размерам окна и перевести в Integer


Song   (2002-03-16 22:41:00) [6]

PaintBox1.Canvas.DrawPoint(X,Y);


Наверх

Титульная страница Поиск, карта сайта Написать письмо