Компьютерное моделирование и анализ кинематики плоских рычажных механизмов, страница 9

Line(x2,y2,x1,y1);          {аналог релятивного ускорения}.

Строим аналоги нормального и тангенциального ускорений точки B3   x1 := pax; y1 := pay;   x2 := x1 - round(ka*lcb*sqr(om3)*cos(fi3));   y2 := y1 + round(ka*lcb*sqr(om3)*sin(fi3));

Line(x1,y1,x2,y2);          {аналог нормального ускорения}   x1 := x2 - round(ka*lcb*epsi3*sin(fi3));   y1 := y2 - round(ka*lcb*epsi3*cos(fi3));

Line(x2,y2,x1,y1);     {аналог тангенциального ускорения}.   Line(pax,pay,x1,y1);   {аналог полного ускорения B3}

Определяем аналог ускорения точки D и строим аналоги нормального и тангенциального ускорений точки E   x1 := pax + round(ka*adx);

y1 := pay - round(ka*ady);   x2 := x1 - round(ka*l4*cos(fi4)*sqr(om4));   y2 := y1 + round(ka*l4*sin(fi4)*sqr(om4));

Line(x1,y1,x2,y2);         {аналог нормального ускорения Ned}   x1 := x2 - round(ka*l4*sin(fi4)*epsi4);   y1 := y2 - round(ka*l4*cos(fi4)*epsi4);

Line(x2,y2,x1,y1);         {аналог тангенциального ускорения Ted}   x2 := pax + round(ka*a5);

y2 := pay;

Line(pax,pay,x2,y2);       {аналог полного ускорения точки E}.

Здесь необходимо отметить, что на рис. 6 не показано нормальное ускорение Ned, хотя мы его строили. Все это происходит из-за выбранного коэффициента увеличения: отрезок данного ускорения очень мал и вырождается в точку.

ПРИЛОЖЕНИЕ 1. Текст модуля DIADA

Unit Diada;

Interface Var

a11,a12,a21,a22,calpha,salpha : real;   b1,b2,alpha,znam              : real;   bx,by                         : real;   ch                            : char;

Procedure Diada1v(sb,ax,ay,vax,vay,aax,aay,cx,cy,vcx,vcy,acx, acy,l2,l3: real; Var fi2,omega2,epsi2,fi3,omega3,epsi3: real); Procedure Diada2v(ax,ay,vax,vay,aax,aay,cx,cy,vcx,vcy,acx,acy, fi3,omega3,epsi3,l2,l3: real; Var fi2,omega2,epsi2,l4,v4,a4:real); Procedure Diada3v(ax,ay,vax,vay,aax,aay,cx,cy,vcx,vcy,acx,acy, l2: real; Var fi3,omega3,epsi3,l3,v3,a3: real);

Procedure Diada4v(ax,ay,vax,vay,aax,aay,fi2,omega2,epsi2,cx,cy, vcx,vcy,acx,acy,fi3,omega3,epsi3,l2,l3: real; Var l1,v1,a1, l4,v4,a4: real);

Procedure Diada5v(ax,ay,vax,vay,aax,aay,cx,cy,vcx,vcy,acx,acy, l2,fi3,omega3,epsi3,alpha: real; Var Ax2,Vax2,Aax2,

Bx3,Vbx3,Abx3: real);

Function Atan2(x,y: real): real;

Implementation

Function Atan2; Begin

if (x > 0) and (y >= 0) then Atan2 := ArcTan(y/x);   if (x > 0) and (y <= 0) then Atan2 := 2*pi - ArcTan(abs(y)/x);   if (x < 0) and (y >= 0) then Atan2 := pi - ArcTan(y/abs(x));   if (x < 0) and (y <= 0) then Atan2 := pi + ArcTan(y/x);   if (x = 0) and (y > 0) then Atan2 := pi/2;

if (x = 0) and (y < 0) then Atan2 := 3*pi/2

End;

Procedure Diada1v;

Var

ac,bx1,by1,bx,by   : real; Begin   { Diada1v }

ac := sqrt(sqr(cx - ax) + sqr(cy - ay));   alpha := Atan2(cx - ax,cy - ay);   salpha := sin(alpha);   calpha := cos(alpha);

bx1 := (sqr(l2) + sqr(ac) - sqr(l3))/(2*ac);   by1 := sqrt(sqr(l2) - sqr(bx1));   if sb = 2 then by1 := - by1;   bx := ax + bx1*calpha - by1*salpha;   by := ay + bx1*salpha + by1*calpha;

fi2 := Atan2(bx - ax,by - ay); if fi2 > 2*pi then fi2 := fi2 2*pi;

fi3 := Atan2(bx - cx,by - cy); if fi3 > 2*pi then fi3 := fi3 -  

2*pi;

if fi2 < 0 then fi2 := fi2 + 2*pi;   if fi3 < 0 then fi3 := fi3 + 2*pi;   a11 := - l2*sin(fi2); a12 :=   l3*sin(fi3);   a21 :=   l2*cos(fi2); a22 := - l3*cos(fi3);   znam := a11*a22 - a21*a12;   b1 := vcx - vax; b2 := vcy - vay;   omega2 := (b1*a22 - b2*a12)/znam;   omega3 := (a11*b2 - a21*b1)/znam;

b1 := acx - aax + a21*sqr(omega2) + a22*sqr(omega3);   b2 := acy - aay - a11*sqr(omega2) - a12*sqr(omega3);   epsi2 := (b1*a22 - b2*a12)/znam;   epsi3 := (a11*b2 - a21*b1)/znam;

End; { Diada1v }

Procedure Diada2v;   Var

x1,y1,x2,bx,by : real;   Begin { Diada2v}     b1 := ax - cx; b2 := ay - cy;     x1 := b1*cos(fi3) + b2*sin(fi3);     y1 := b2*cos(fi3) - b1*sin(fi3);     x2 := sqrt(sqr(l2) - sqr(y1 - l3));     l4 := x1 + x2;