Дисциплина:
Раздел:
Выполнил:

Теоретическая механика

Динамика. Механическая система. Скорость и ускорение.

ЧГУ, матфак, 5 курс, Васильев С

www.domath.ru

>   

#Подключим стандартные пакеты: пакет графики, пакет инструментария для работы с графикой.

restart:
with(plots):
with(plottools):

#Важно отметить, что задача на графическое аннимирования данного механизма
#весьма сложна. В ООП принято сложные комплексы разбивать на отдельные более простые

# компоненты, являющиеся независимыми друг от друга. Так легче тестировать и использовать их.
#В нашем случае механизм состоит из нескольких частей, для отображения каждой из которых

#потребуется четкая и логическая организация. Мы полагаем, что ниже представлена весьма

#эффективная организация системы.

  #Процедура изображения прямоугольника a x b  c центром  в точке  (x[i],y[i])
>    Cubic:=proc(i::integer,A,B)
                  local X,Y:
      
                        X:=x[i];
                        Y:=y[i];

PLOT(POLYGONS([[X-A,Y+B],
               [X+A,Y+B],
               [X+A,Y-B],
               [X-A,Y-B]])):

end:

  #Процедура изображения цилиндра c центром в точке  (A,B) радиуса R
>    Cilindr:=proc(A,B,R)
                      circle([A,B],R,color=red):
end:

  #Процедура изображения окружности с центром в точке (x[i],y[i])
>    Koleso:=proc(i::integer,R)
           PLOT(circle([x[i],y[i]],R,color=blue))
end:

  #Процедура изображения горизонтальной опорной поверхности(вверху h1<0 , внизу h1>0)
>    Gorizont:=proc(x,y,L,h1)
                        local N:
                              N:=round(abs(L/h))-3:
 
                               display(PLOT(CURVES([[x,y],[x+L,y]],
                                                seq([[x+L*j/N/2,y],
                                                    [x+L*j/N/2-h,y-h]],j=0..2*N)))):
end:

#Процедура изображения неподвижной опоры в точке i

>    Opora:=proc(i::integer,R)
               local x0,x1,y0,h,N:

x0:= x[i]-R*0.7: x1:= x[i]+R*0.7:
y0:= y[i]-R*0.7: h:=  3*R:  N:=2:

display(PLOT(circle([x[i],y[i]],R,color=blue)),
        PLOT(CURVES([[x0,y0],[x[i]-h,y[i]-h]],
                    [[x1,y0],[x[i]+h,y[i]-h]],
                    [[x0-h,y[i]-h],[x1+h,y[i]-h]],
                seq([[x0-h*(-j/N+1),y[i]-h],
                    [x0-h*(-j/N+1)-h/4,y[i]-h*1.3]],j=0..2*N+1)  ))):
end:





  #Процедура изображения линии от точки i  к  j

>    Linia:=proc(i::integer,j::integer,k::integer)
                 global x,y:
                        PLOT(CURVES([[x[i],y[i]],[x[j],y[j]]])):
end:


  #Процедура изображения точек на вращающемся колесе радиуса R c центром  в точке  i

>    Points:=proc(i::integer,R,f)
                      local j::integer:

               PLOT(seq(POINTS([x[i]+R*cos(f+pi/3*j),
               y[i]+R*sin(f+pi/3*j)]),j=0..5)):

end:


  #Подписи шарниров на рисунке

>    mas:=array(0..3,[O,A,B,C]):

 

  #Начальные значения

>    OA:= 1.7: AB:=1.5:
BC:= 7:   R:=1:
r:=0.1:   a:=0.01:

  #Угловая  скорость  OA

>    omegaOA:= 3:
T:=2*pi/omegaOA:
#период обращения

pi:=evalf(Pi):

  #Координаты опоры O

>    x[0]:=0:
y[0]:=0:

#Количество кадров K
K:=24:


>    for i from 0 to K
                  do
#Создаем все кадры
  
                   t:=sin(pi*i/K)*T/12;
#Закон движения  АO
                   
phi:=pi/6+t*omegaOA;

        
            
   #Координаты шарнира А N1

                     x[1]:= OA*cos(phi);            
                     y[1]:= OA*sin(phi);

              
   #Координаты шарнира B N2

                       x[2]:=2*x[1]:
                       y[2]:=0:
                     
                
 #Координаты шарнира C N3

                                                  
                     
x[3]:=x[2]+BC:
                     y[3]:=0:

 

   P[i]:= display(  
                   Cubic(2,4*a,2*a),
                   Points(3,R,-x[2]/R),
                   Silindr(x[3],y[3],R),

                   Linia(0,1,7),
                   Linia(1,2,7),
                   Linia(2,3,8),

                   Koleso(2,r),
                   Koleso(1,r),
                   Koleso(3,r),

                   seq(TEXT([x[j]+0.1,y[j]+0.4],mas[j]),j=0..3)


):
od:

>    #Изображение механизма в движении

>    Pic:=display(seq(P[i],i=0..K),insequence=true,thickness=2,scaling=constrained,axes=none):

>    display(
Gorizont(x[0]+5*R,-R,6*R,0.3),
Gorizont(1.1,y[2]-2.5*a,2*R,0.25),
Opora(0,0.1),
Pic);

    

[Maple Plot]