![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Нарисовать график [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);