.


:




:

































 

 

 

 


, . 2.1.3. Form1 Shape1 Shape2, Timer1 6 . 2.4. Shape1 Shape2 , .

Timer.Enabled True, Form1.BorderStyle, bsSingle .

 

Shape1
Shape2
Timer1
Button1
Button2
Button3
Button4
Button5
Button6

2.4

 

, , . 2.1.3, . (). Pascal:

 

type TMeh1 = record

Nx: shortint; // x

// (-1 - , 0 - ,+1 - )

Ny: shortint; // y

// (-1 , 0 - ,+1 - )

vx: real; // x

vy: real; // y

x1: real; // x

y1: real; // y

end;

 

type TMeh2 = record

Ny: shortint; // y

// (-1 , 0 - ,+1 - )

vy: real; // y

y2: real; // y

end;

 

TMeh1 TMeh2 1 2 :

var

Meh1: TMeh1;

Meh2: TMeh2;

D: real;

LeftMin, TopMin:integer;

 

D (2.2). LeftMin LeftMax Shape1, 1 ( 2.3).

, , :

 

const

L = 10; // 1,

H = 5; // 1,

d1 = 1; // 1,

d2 = 0.7; // 2,

h1 = 3; // 1,

h2 = 1; // 2,

a1max = 1.5; // 1, /2

a2max = 4; // 2, /2

v1ust = 1; // 1, /

v2ust = 0.6; // 2, /

 

OnCreate . D Shape1 Shape2.

 

procedure TForm1.FormCreate(Sender: TObject);

var

Xmax, Ymax, Dx, Dy: real;

begin

// 1

Meh1.Nx:=0;

Meh1.Ny:=0;

Meh1.vx:=0;

Meh1.vy:=0;

Meh1.x1:=0;

Meh1.y1:=0;

// 2

Meh2.Ny:=0;

Meh2.vy:=0;

Meh2.y2:=0;

//

Xmax:=L+d1+d2;

Ymax:=H+h1;

Dx:=(90-10)/100*Form1.ClientWidth/Xmax;

Dy:=(70-10)/100*Form1.ClientHeight/Ymax;

if (Dy>Dx) then

begin

D:=Dx;

end

else

begin

D:=Dy;

end;

// Shape

Shape1.Width:=round(D*d1);

Shape1.Height:=round(D*h1);

Shape2.Width:=round(D*d2);

Shape2.Height:=round(D*h2);

//

LeftMin:=round(10/100*Form1.ClientWidth);

TopMin:=round(10/100*Form1.ClientHeight);

// Shape

Risovanie();

end;

 

, Shape LeftMin TopMin round(), .

Shape Risovanie, (2.3) (2.4). Form1.OnCreate. (. ).

 

procedure Risovanie();

begin

Form1.Shape1.Left:=round(D*Meh1.x1+LeftMin);

Form1.Shape1.Top:=round(D*Meh1.y1+TopMin);

Form1.Shape2.Left:=round(D*(Meh1.x1+d1)+LeftMin);

Form1.Shape2.Top:=round(D*(Meh1.y1+Meh2.y2)+TopMin);

end;

 

, OnMouseDown , OnMouseUp . ( Meh1.Nx, Meh1.Ny, Meh2.Ny), . :

 

procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

Meh1.Nx:=+1; // 1

end;

 

procedure TForm1.Button2MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

Meh1.Nx:=-1; // 1

end;

 

procedure TForm1.Button3MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

Meh1.Ny:=-1; // 1

end;

 

procedure TForm1.Button4MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

Meh1.Ny:=+1; // 1

end;

 

procedure TForm1.Button5MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

Meh2.Ny:=-1; // 2

end;

 

procedure TForm1.Button6MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

Meh2.Ny:=+1; // 2

end;

 

procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

Meh1.Nx:=0; // 1

end;

 

procedure TForm1.Button2MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

Meh1.Nx:=0; // 1

end;

 

procedure TForm1.Button3MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

Meh1.Ny:=0; // 1

end;

 

procedure TForm1.Button4MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

Meh1.Ny:=0; // 1

end;

 

procedure TForm1.Button5MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

Meh2.Ny:=0; // 2

end;

 

procedure TForm1.Button6MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

Meh2.Ny:=0; // 2

end;

 

OnTimer Timer1 , , .

1 x 2.5. Nx +1. a1max. . v1ust, 0 1 . Nx 0, . , . x 2.6.

Meh1.Nx = +1
Meh1.Nx = 0
a = +a1max
a = 0
a = -a1max
v = +v1ust
t
2.5

 

 
 
Meh1.Nx = 0
 
Meh1.Nx = +1
a:= +a1max
a:= -a1max
 
Meh1.vx >= v1ust
a:= 0
 
Meh1.vx <= -v1ust
a:= 0
 
a:= 0 Meh1.vx:=0
2
1
3
. .
1
2
3
4
5
6
7
8
((Meh1.x1>=L) and (Meh1.Nx>=0)) or ((Meh1.x1<=0) and (Meh1.Nx<=0))

 
2
Meh1.vx:=Meh1.vx + a∙∆t Meh1.x1:=Meh1.x1 + Meh1.vx ∙∆t
1 y
2 y
Risovanie();
Shape
 
 
2
,
 
 
Meh1.vx > 0
a:= -a1max
a:= +a1max
 
Meh1.vx <= 0.01×v1ust
a:= 0 Meh1.vx:=0
 
Meh1.vx >= -0.01×v1ust
a:= 0 Meh1.vx:=0
 
3

2.6

 

1 y 0<Meh1.y1<H 2 y 0<Meh2.y2<h1.

, 2.6, . , , , . 1-9 ( 2.6).

1. OnTimer. Timer1 . Events. OnTimer:

 

procedure TForm1.Timer1Timer(Sender: TObject);

begin

 

end;

 

2. a:

 

procedure TForm1.Timer1Timer(Sender: TObject);

var

a:real;

begin

 

end;

 

3. 1 ( 2.6). begin-end else. , .

 

procedure TForm1.Timer1Timer(Sender: TObject);

var

a:real;

begin

if Meh1.Nx=0 then

begin //

end

else

begin //

end;

end;

 

4. 2 , . , .

 

begin

if Meh1.Nx=0 then

begin //

end

else

begin //

if Meh1.Nx=+1 then

begin //

end

else

begin //

end;

end;

end;

 

6. 3, 4 5:

 

begin

if Meh1.Nx=0 then

begin //

end

else

begin //

if Meh1.Nx=+1 then

begin //

end

else

begin //

a:=-a1max;

if Meh1.vx<=-v1ust then

begin //

a:=0;

end; { // else

else

begin //

end; }

end;

end;

end;

 

7. 6, 7 8:

 

begin

if Meh1.Nx=0 then

begin //

end

else

begin //

if Meh1.Nx=+1 then

begin //

a:=+a1max;

if Meh1.vx>=v1ust then

begin //

a:=0;

end;

end

else

begin //

a:=-a1max;

if Meh1.vx<=-v1ust then

begin //

a:=0;

end; { // else

else

begin //

end; }

end;

end;

end;

 

. x :

 

begin

if Meh1.Nx=0 then

begin //

if Meh1.vx>0 then

begin //

a:=-a1max;

if Meh1.vx<=0.01*v1ust then

begin //

a:=0;

Meh1.vx:=0;

end;

end

else

begin //

a:=+a1max;

if Meh1.vx>=-0.01*v1ust then

begin //

a:=0;

Meh1.vx:=0;

end;

end;

end

else

begin //

if Meh1.Nx=+1 then

begin //

a:=+a1max;

if Meh1.vx>=v1ust then

begin //

a:=0;

end;

end

else

begin //

a:=-a1max;

if Meh1.vx<=-v1ust then

begin //

a:=0;

end; { // else

else

begin //

end; }

end;

end;

//

if ((Meh1.x1>=L) and (Meh1.Nx>=0)) or ((Meh1.x1<=0) and (Meh1.Nx<=0)) then

begin //

a:=0;

Meh1.vx:=0;

end;

// . x 1

Meh1.vx:=Meh1.vx + a*0.01;

Meh1.x1:=Meh1.x1 + Meh1.vx*0.01;

 

 

// Shape

Risovanie();

end;

 

1 .

OnTimer :

 

procedure TForm1.Timer1Timer(Sender: TObject);

var

a:real;

begin

if Meh1.Nx=0 then

begin //

if Meh1.vx>0 then

begin //

a:=-a1max;

if Meh1.vx<=0.01*v1ust then

begin //

a:=0;

Meh1.vx:=0;

end;

end

else

begin //

a:=+a1max;

if Meh1.vx>=-0.01*v1ust then

begin //

a:=0;

Meh1.vx:=0;

end;

end;

end

else

begin //

if Meh1.Nx=+1 then

begin //

a:=+a1max;

if Meh1.vx>=v1ust then

begin //

a:=0;

end;

end

else

begin //

a:=-a1max;

if Meh1.vx<=-v1ust then

begin //

a:=0;

end; { // else

else

begin //

end; }

end;

end;

//

if ((Meh1.x1>=L) and (Meh1.Nx>=0)) or ((Meh1.x1<=0) and (Meh1.Nx<=0)) then

begin //

a:=0;

Meh1.vx:=0;

end;

// e . x 1

Meh1.vx:=Meh1.vx + a*0.01;

Meh1.x1:=Meh1.x1 + Meh1.vx*0.01;

// -------------------- 1 y -----------------------------------

if Meh1.Ny=0 then

begin //

if Meh1.vy>0 then

begin //

a:=-a1max;

if Meh1.vy<=0.01*v1ust then

begin //

a:=0;

Meh1.vy:=0;

end;

end

else

begin //

a:=+a1max;

if Meh1.vy>=-0.01*v1ust then

begin //

a:=0;

Meh1.vy:=0;

end;

end;

end

else

begin //

if Meh1.Ny=+1 then

begin //

a:=+a1max;

if Meh1.vy>=v1ust then

begin //

a:=0;

end;

end

else

begin //

a:=-a1max;

if Meh1.vy<=-v1ust then

begin //

a:=0;

end;

end;

end;

//

if ((Meh1.y1>=H) and (Meh1.Ny>=0)) or ((Meh1.y1<=0) and (Meh1.Ny<=0)) then

begin //

a:=0;

Meh1.vy:=0;

end;

// e . y 1

Meh1.vy:=Meh1.vy + a*0.01;

Meh1.y1:=Meh1.y1 + Meh1.vy*0.01;

// -------------------- 2 y -----------------------------------

if Meh2.Ny=0 then

begin //

if Meh2.vy>0 then

begin //

a:=-a2max;

if Meh2.vy<=0.01*v2ust then

begin //

a:=0;

Meh2.vy:=0;

end;

end

else

begin //

a:=+a2max;

if Meh2.vy>=-0.01*v2ust then

begin //

a:=0;

Meh2.vy:=0;

end;

end;

end

else

begin //

if Meh2.Ny=+1 then

begin //

a:=+a2max;

if Meh2.vy>=v2ust then

begin //

a:=0;

end;

end

else

begin //

a:=-a2max;

if Meh2.vy<=-v2ust then

begin //

a:=0;

end;

end;

end;

//

if ((Meh2.y2>=(h1-h2)) and (Meh2.Ny>=0)) or ((Meh2.y2<=0) and (Meh2.Ny<=0)) then

begin //

a:=0;

Meh2.vy:=0;

end;

// e . y 1

Meh2.vy:=Meh2.vy + a*0.01;

Meh2.y2:=Meh2.y2 + Meh2.vy*0.01;

 

// Shape

Risovanie();

end;

 



<== | ==>
|
:


: 2018-10-15; !; : 184 |


:

:

, , 1:10
==> ...

1518 - | 1462 -


© 2015-2024 lektsii.org - -

: 0.212 .