график функции |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
график функции |
denis |
Сообщение
#1
|
Гость |
Задача состоит в следующем, нарисовать график функции с возможностью увеличения и уменьшения в дочке x,y. С масштабированием проблем нет, рисует как надо но с увеличением и уменьшением бред получается, весь инет перерыл нечего похожего не нашел.
|
Гость |
Сообщение
#2
|
Гость |
Код покажи...
Иначе ничего, кроме "ошибка в 17-ой строке" не услышишь... |
Гость |
Сообщение
#3
|
Гость |
Код покажи... Иначе ничего, кроме "ошибка в 17-ой строке" не услышишь... Но это бред Код unit main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Image1: TImage; Button4: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } end; var Form1: TForm1; sx,sy:integer; implementation {$R *.dfm} function f_y(x:real):real; begin f_y:=(((sin(x/2)/cos(x/2)))+cos(x))/(sin(1/x)); end; procedure showGraf(dx,dy,scale:integer); var x,y,a,b,h,mx,my,xx,yy:real; begin with Form1 do begin a:=0; b:=9.42; h:=0.942; my:=dy/(20-(-20)); mx:=dx/(10-(-10)); x:=0; Image1.Canvas.Pen.Style:=psSolid; Image1.Canvas.Rectangle(0,0,500,300); x:=x+h; image1.Canvas.MoveTo(round(dx/2-x*mx),round(300/2-f_y(x)*my)); while x<=b-0.94 do begin yy:=dy/2-f_y(x)*my; xx:=dx/2+x*my;; Image1.Canvas.LineTo(round(xx),round(yy)); x:=x+h; end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin sx:=500; sy:=300; showGraf(sx,sy,0); end; procedure TForm1.Button2Click(Sender: TObject); begin Close; end; procedure TForm1.Button3Click(Sender: TObject); begin Image1.Refresh; sx:=sx-20; sy:=sy+10; showGraf(sx,sy,1); end; procedure TForm1.Button4Click(Sender: TObject); begin Image1.Refresh; sx:=sx+20; sy:=sy-10; showGraf(sx,sy,1); end; procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button=mbLeft then begin sx:=sx-10; end; if Button=mbRight then begin sx:=sx+10; end; showGraf(sx,sy,1); end; end. |
regffgfd |
Сообщение
#4
|
Гость |
Вот переписал, но с увеличением и уменьшением нечего не получается.
Код unit Unit1; [b][/b][b] interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Image1: TImage; Button1: TButton; Button2: TButton; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} var xtmin,xtmax:integer; procedure show_f(mx,my:integer; ssx,ssy:double; xma,xmi:integer); var x,y:array[1..10]of real; i:integer; h:real; xmin,xmax,ymin,ymax,sx,sy:double; begin Form1.Image1.Refresh; Form1.Image1.Canvas.Pen.Style:=psSolid; Form1.Image1.Canvas.Rectangle(0,0,500,300); h:=0.94; i:=1; for i:=1 to 9 do begin x[i]:=h; y[i]:=(((sin(h/2)/cos(h/2)))+cos(h))/(sin(1/h)); h:=h+0.94; end; xmin:=x[1]; xmax:=x[1]; ymin:=y[1]; ymax:=y[1]; for i:=2 to 9 do begin if y[i]<ymin then ymin:=y[i]; if y[i]>ymax then ymax:=y[i]; if x[i]<xmin then xmin:=x[i] if x[i]>xmax then xmax:=x[i]; end; sx:=Form1.Image1.Width/(xmax-xmin); sy:=Form1.Image1.Height/(ymax-ymin); with Form1.Image1.Canvas do begin moveto(trunc(sx*(x[1]-xmin)),Form1.Image1.height-trunc(sy*(y[1]-ymin))); for i:=2 to 9 do begin Lineto(trunc(sx*(x[i]-xmin)),Form1.Image1.height-trunc(sy*(y[i]-ymin))); end; end; end; procedure TForm1.Button2Click(Sender: TObject); begin close; end; procedure TForm1.Button1Click(Sender: TObject); begin show_f(1,1,1,1,1,1); end; procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button=mbLeft then begin ??????????????????????? ++++ ??????????????????????????? // xtmax:=xtmax+1; xtmin:=xtmax-1; // show_f(1,1,1,1,xtmax,xtmin); end; if Button=mbRight then begin ??????????????????????? ----- ??????????????????????????? // xtmax:=xtmax-1; xtmin:=xtmax+1; // show_f(1,1,1,1,xtmax,xtmin); end; end; end. |
Текстовая версия | 17.09.2024 13:48 |