![]() |
|
#1
|
||||
|
||||
![]() Всем привет.Дана программа рисующая параболу с векторами на ней.надо сделать так чтобы каждый вектор рисовался ток по активации кнопки(т.е. выбираю 1 вектор тыкаю, старт, и рисует ток его и т.д.) пытался делать все через RadioButton не вышло,помогите сделать так что бы заработало ну или подскажите как сделать,а то ничего не выходит(
Код:
procedure TForm1.onPaint(Sender: TObject); Var y_up, y_down,n,i:integer; tau,x,y,v_x,v_y,w_x,W_y,v,w,w_tau,w_n,ro: real; begin x_origin:=Form1.Width div 2; y_origin:=Form1.Height div 2; x_left:=round (Form1.Width/20); x_right:=round (Form1.Width-Form1.Width/20); y_up:=round (Form1.Height/20); y_down :=round (Form1.Height-Form1.Height/20); n:=10; x_step:=round ((x_right-x_left)/n); y_step:=round ((y_down - y_up)/n); x_origin := x_left + x_step * (n div 2); //штрихи y_origin := y_up + y_step * (n div 2); with Form1.Canvas do Begin MoveTo (x_left, y_origin); LineTo (x_right, y_origin); MoveTo (x_origin, y_up); LineTo (x_origin, y_down); for i:=1 to n-1 do Begin MoveTo (x_left+x_step*i, y_origin-3); LineTo (x_left+x_step*i, y_origin+3); MoveTo (x_origin-3, y_up+y_step*i); LineTo (x_origin+3, y_up+y_step*i); end; MoveTo (x_right, y_origin); LineTo (x_right-5, y_origin-5); MoveTo (x_right, y_origin); LineTo (x_right-5, y_origin+5); MoveTo (x_origin, y_up); LineTo (x_origin+5, y_up+5); MoveTo (x_origin, y_up); LineTo (x_origin-5, y_up+5); TextOut (x_right-5, y_origin+5, 'x'); // название TextOut (x_origin-10,y_up+5, 'y'); TextOut(x_origin - TextWidth('0') - 3, y_origin - TextHeight('0') - 3, '0'); for i:=1 to 1000 do begin tau:=i/50; Form1.Canvas.Pixels[round(x_origin+(7*tau*tau+1)*x_step), round(y_origin+(5*tau)*y_step)]:=clBlue; end; end; end; procedure vector(x0,y0,abs_r:integer;gamma:real) ; Var alpha:real; yk, xk,x1,y1,x2,y2,delta:integer; begin with Form1.Canvas do begin xk:=round (x0+abs_r*cos(gamma)); yk:=round (y0-abs_r*sin(gamma)); MoveTo (x0,y0); LineTo (xk,yk); alpha:=Pi/6; delta:=10; x1:=round (xk-delta*(cos(alpha)*cos(gamma)+sin(alpha)*sin(gamma))); y1:=round (yk+delta*(cos(alpha)*sin(gamma)-sin(alpha)*cos(gamma))); x2:=round (xk-delta*(cos(alpha)*cos(gamma)-sin(alpha)*sin(gamma))); y2:=round (yk+delta*(cos(alpha)*sin(gamma)+sin(alpha)*cos(gamma))); MoveTo(xk,yk); LineTo(x1,y1); Moveto(xk,yk); LineTo(x2,y2); end; end; procedure TForm1.Timer1Timer(Sender: TObject); const q=0.005 ; w=pi/2; e=pi/4; Var i,j,x0,yo:integer; track: array [1..10000] of Tpoint; begin with Form1.Canvas do begin Label1.Caption:=floattostr(t); t:=t+1/1000; i:=round (1000*t); track[i].x:=round((7*t*t+1)*x_step); track[i].y:=round((-5*t)*y_step); begin Pen.Color:=clbtnFace; Vector (x_origin+track[i-1].x,y_origin-track [i-1].y,round(v_x),0); Vector(x_origin+track[i-1].x,y_origin-track[i-1].y,abs(round(v_y)),3*w); Vector(x_origin+track[i-1].x,y_origin-track [i-1].y,round(v_x),e); Vector(x_origin+track[i-1].x,y_origin-track [i-1].y,round(v_x),7*e); Pen.Color:=clBlack; Vector(x_origin+track[i].x,y_origin-track [i].y,round(v_x),0); Vector(x_origin+track[i].x,y_origin-track [i].y,round(v_x),pi/4); Vector(x_origin+track[i].x,y_origin-track [i].y,round(v_x),7*e); Vector(x_origin+track[i].x,y_origin-track[i].y,abs(round(v_y)),3*w); MoveTo (x_left, y_origin); LineTo (x_right, y_origin); Pixels[round(x_origin+(7*(t-q)*(t-q)+1)*x_step), round(y_origin+(5*(t-q))*y_step)]:=clBlue; end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin t:=0; table; Form1.Timer1.Enabled:=true; end; procedure TForm1.Button2Click(Sender: TObject); begin Form1.Timer1.Enabled:=False; end; end. p.s. заранее спасибо Последний раз редактировалось Admin, 25.12.2012 в 09:03. |