Введение

Как правило, индивидуальное домашнее задание по этой теме является первым ИДЗ по сопромату, которое выполняют студенты. Здесь обычно задаются несколько профилей (двутавры, швеллеры, уголки и т.д.), соединённых друг с другом, и требуется вычислить геометрические характеристики такого сложного сечения и найти главные центральные оси инерции.

Данное пособие позволит вам упростить выполнение этого ИДЗ. Как и любой помощник, оно не избавляет вас от необходимости думать. Используя это пособие, вы получите техническую помощь, избавитесь от досадных ошибок вычислений, но понимать существо проблемы вы всё равно должны. Но не пугайтесь: если вы смогли найти эту страницу в Internet, то разобраться в выполнении этого задания сможете наверняка.

Мы будем выполнять это ИДЗ с помощью системы инженерных и научных расчётов MATLAB. Запустите свой MATLAB. Из любой области ввода (она отмечена вот таким зелёным шрифтом скопируйте содержимое и вставьте его в командное окно или редактор-отладчик MATLAB. Теперь запускайте на счёт. Результаты можно сравнить с содержимым области вывода (вот такой синий шрифт).

В данном методическом пособии можно использовать такие простые сечения:

Если в вашем вузе преподаватели задают студентам другие профили − напишите мне, и мы вместе доработаем это пособие.

Таблицы для сортаментов взяты из [1]. Красная точка на каждом рисунке − это точка привязки (см. далее пункт Заполнение исходных данных).

Ввод исходных данных

Исходными данными для выполнения этого ИДЗ являются различные профили, каким-либо образом соединённые между собой. Для ввода ИД нам нужно знать:

Все эти данные будем задавать в массиве InpData размером n×7, где n − количество профилей. Каждая строка этого массива задаёт данные одного из сечений. Семь чисел строки имеют следующий смысл.

Первое число − это тип сечения. Он задаётся следующим образом:

  1. прямоугольник;
  2. двутавр;
  3. швеллер;
  4. уголок равнополочный;
  5. уголок неравнополочный;
  6. уголок неравнополочный отражённый.

Второе, третье и четвёртое числа задают размеры сечения по следующему правилу:

  1. Для прямоугольника 2-е число − ширина b в см; 3-е число − высота h в см; 4-е число может быть любым.
  2. Для двутавра 2-е число − номер профиля, а 3-е и 4-е могут быть любыми. Если используется номер с расширением а, то он должен задаваться, как одна десятая. Например, для двутавровой балки №18 задаём число 18, а для балки №18а задаём 18.1.
  3. Для швеллера − то же самое, что и для друтавра.
  4. Для равнополочного уголка 2-е и 3-е числа задают номер уголка и толщину t, а 4-е число − произвольное.
  5. Для неравнополочного уголка 2-е и 3-е числа задают номер уголка, а 4-е − толщину t.
  6. Для отражённого неравнополочного уголка – то же самое, что и для обычного неравнополочного уголка.

Пятое, шестое и седьмое числа каждой строки задают расположение фигуры на плоскости. Вы уже заметили, что на рис.1-6 имеется вот такая красная точка: . Она определяет т.н. точку привязки. Мы должны сами выбрать какую-либо систему координат, и в этой системе задать расположение каждой фигуры. Так вот, 5-е и 6-е числа каждой строки (сечения) задают координаты точки привязки в см, а 7-е число − угол поворота этой фигуры в радианах (положительный − против часовой стрелки). Фигуры, изображённые на рис.1-6, считаются неповёрнутыми, для такого положения задаём угол поворота 0.

Рассмотрим пример, который мы дальше будем считать. Пусть мы имеем сечение, показанное на рис.7.

Это сечение состоит из 6 профилей, данные которых показаны на рисунке. Соответственно, массив InpData будет иметь 6 строк. Выберем систему координат так, чтобы её начало совпадало с левым нижним углом балки.

1-я строка массива InpData − это данные по балке. У нас есть балка шириной 50 см, высотой 3 см, её точка привязки (левый нижний угол) имеет координаты 0 и 0, и она не повёрнута, поэтому имеем:

1 50 3 0 0 0 0

2-я строка массива InpData − данные по двутавру. У нас есть двутавр №20а, его точка привязки (левый нижний угол) имеет координаты 0 и 3, и он не повёрнут, поэтому имеем:

2 20.1 0 0 0 3 0

3-я строка InpData − данные швеллера. У нас швеллер №12 лежит горизонтально посередине балки. Поэтому он повёрнут на угол π/2, и его точка привязки имеет x координату, равную половине ширины балки + половина высоты профиля, а y координата равна 3. Имеем:

3 12 0 0 25+6 3 π/2

4-я строка − данные равнополочного уголка №16/18. Он повёрнут на угол π, и его точка привязки имеет координаты 50 и 0. Имеем:

4 16 18 0 50 0 π

5-я строка − неравнополочный уголок №14/9/8. Он повёрнут на угол −π/2, а его точка привязки имеет координаты 0 и 0. Имеем:

5 14 9 8 0 0 −π/2

И, наконец, 6-я строка − отражённый неравнополочный уголок №9/5.6/5.5. Он не повёрнут, а его точка привязки имеет координаты 50 и 3:

6 9 5.6 5.5 50 3 0

Введём эти данные и напечатаем их.

clear all
InpData=...
  [[1,50,3,0,0,0,0];...
   [2,20.1,0,0,0,3,0];...
   [3,12,0,0,25+6,3,pi/2];...
   [4,16,18,0,50,0,pi];...
   [5,14,9,8,0,0,-pi/2];...
   [6,9,5.6,5.5,50,3,0]];
n=size(InpData,1); % общее число фигур
disp('Сечение состоит из профилей:')
for k=1:n,
  switch InpData(k,1)
  case 1,
    fprintf(['%2.0f. прямоугольная полоса, ' ...
      'b=%d см, h=%d см;\n'],...
      k,InpData(k,2:3))
  case 2,
    if InpData(k,2)-fix(InpData(k,2))>0,
      StrSort=[num2str(fix(InpData(k,2))) 'a'];
    else
      StrSort=num2str(InpData(k,2));
    end
    fprintf('%2.0f. двутавр No %s;\n',k,StrSort)
  case 3,
    if InpData(k,2)-fix(InpData(k,2))>0,
      StrSort=[num2str(fix(InpData(k,2))) 'a'];
    else
      StrSort=num2str(InpData(k,2));
    end
    fprintf('%2.0f. швеллер No %s;\n',k,StrSort)
  case 4,
    fprintf('%2.0f. уголок равнополочный No %s/%s;\n',...
      k,num2str(InpData(k,2)),num2str(InpData(k,3)))
  case 5,
    fprintf('%2.0f. уголок неравнополочный No %s/%s/%s;\n',...
      k,num2str(InpData(k,2)),num2str(InpData(k,3)),...
      num2str(InpData(k,4)))
  case 6,
    fprintf(['%2.0f. уголок неравнополочный отражённый ' ...
      'No %s/%s/%s;\n'],...
      k,num2str(InpData(k,2)),num2str(InpData(k,3)),...
      num2str(InpData(k,4)))
  otherwise
    fprintf('%2.0f. неизвестный профиль;\n',k)
  end
end
disp('Расположение профилей на плоскости:')
disp(['No      x0       ' ...
  'y0        alpha'])
fprintf('%2.0f   %6.2f   %6.2f   %9.5f\n',[[1:n]',InpData(:,5:7)]')
Сечение состоит из профилей:
 1. прямоугольная полоса, b=50 см, h=3 см;
 2. двутавр No 20a;
 3. швеллер No 12;
 4. уголок равнополочный No 16/18;
 5. уголок неравнополочный No 14/9/8;
 6. уголок неравнополочный отражённый No 9/5.6/5.5;
Расположение профилей на плоскости:
No      x0       y0        alpha
 1     0.00     0.00     0.00000
 2     0.00     3.00     0.00000
 3    31.00     3.00     1.57080
 4    50.00     0.00     3.14159
 5     0.00     0.00    -1.57080
 6    50.00     3.00     0.00000

Теперь введём из базы данных (или посчитаем) характеристики наших сечений и нарисуем эскиз конструкции. Базы данных и процедуру для рисования сложного сечения перепишите отсюда (zip-архив, 6kb). Базы данных в этом архиве − обычные текстовые файлы, процедура рисования − m-файл, т.е. также обычный текстовый файл. Распакуйте переписанные файлы в какой-либо каталог, доступный системе MATLAB. Считаем:

GeoDat=zeros(n,7); % массив для геометрических данных
F=zeros(n,1); % площади
Xc0=F; % координаты ц.т.
Yc0=F;
Jx=F; % моменты инерции
Jy=F;
Jxy=F;
for k=1:n, % для каждого элемента загружаем данные
  if InpData(k,1)==1, % прямоугольник
    b=InpData(k,2);
    h=InpData(k,3);
    GeoDat(k,1)=h; 
    GeoDat(k,3)=b; % размеры
    Xc0(k)=b/2;
    Yc0(k)=h/2; % координаты ц.т.
    F(k)=b*h;
    Jx(k)=b*h^3/12;
    Jy(k)=h*b^3/12; 
  elseif InpData(k,1)==2, % двутавр ГОСТ 8239-72
    load dwudata.txt % загружаем базу данных
    dwu=dwudata(find(dwudata(:,1)==InpData(k,2)),:); % нашли нужный
    GeoDat(k,1)=dwu(2)/10; % h
    GeoDat(k,3:7)=dwu(3:7)/10; % b,s,t,R,r
    Xc0(k)=GeoDat(k,3)/2; 
    Yc0(k)=GeoDat(k,1)/2; % xc, yc
    F(k)=dwu(8);
    Jx(k)=dwu(9);
    Jy(k)=dwu(12);
  elseif InpData(k,1)==3, % швеллер ГОСТ 8240-72
    load shwedata.txt % загружаем базу данных
    shwe=shwedata(find(shwedata(:,1)==InpData(k,2)),:); % нужный
    GeoDat(k,1)=shwe(2)/10; % h
    GeoDat(k,3:7)=shwe(3:7)/10; % b,s,t,R,r
    Xc0(k)=shwe(14);  
    Yc0(k)=GeoDat(k,1)/2; % xc, yc
    F(k)=shwe(8);
    Jx(k)=shwe(9);
    Jy(k)=shwe(12); % Jy
  elseif InpData(k,1)==4, % равнополочный уголок ГОСТ 8509-86
    load rudata.txt % загружаем базу данных
    ru=rudata(find((rudata(:,1)/10==InpData(k,2))&...
      (rudata(:,2)==InpData(k,3))),:);
    GeoDat(k,1)=ru(1)/10; % h
    GeoDat(k,5:7)=ru(2:4)/10; % t,R,r
    Xc0(k)=ru(8);  
    Yc0(k)=ru(8); % xc,yc
    F(k)=ru(5);  
    Jx(k)=ru(6);  
    Jy(k)=ru(6);  
    Jxy(k)=-ru(7);
  elseif InpData(k,1)==5, % неравнополочный уголок, ГОСТ 8510-86
    load nrudata.txt % загружаем базу данных
    nru=nrudata(find((nrudata(:,1)/10==InpData(k,2))&...
      (nrudata(:,2)/10==InpData(k,3))&...
      (nrudata(:,3)==InpData(k,4))),:);
    GeoDat(k,2:3)=nru(1:2)/10; % B,b
    GeoDat(k,5:7)=nru(3:5)/10; % t,R,r
    Xc0(k)=nru(9);  
    Yc0(k)=nru(10);
    F(k)=nru(6);  
    Jx(k)=nru(7);  
    Jy(k)=nru(8);  
    Jxy(k)=-nru(11);
  elseif InpData(k,1)==6, % отражённый неравнополочный уголок
    load nrudata.txt % загружаем базу данных
    nru=nrudata(find((nrudata(:,1)/10==InpData(k,2))&...
      (nrudata(:,2)/10==InpData(k,3))&...
      (nrudata(:,3)==InpData(k,4))),:);
    GeoDat(k,2:3)=nru(1:2)/10; % B,b
    GeoDat(k,5:7)=nru(3:5)/10; % t,R,r
    Xc0(k)=-nru(9);  
    Yc0(k)=nru(10);
    F(k)=nru(6);  
    Jx(k)=nru(7);  
    Jy(k)=nru(8);  
    Jxy(k)=nru(11);
  end   
end   
disp('Характеристики сечений (из таблиц или посчитанные):')
disp(['No      xc0      ' ...
  'yc0       F           ' ...
  'Jx          Jy'...
  '         Jxy'])
fprintf('%2.0f   %6.2f   %6.2f   %6.2f   %9.2f   %9.2f   %9.2f\n',...
  [[1:n]',Xc0,Yc0,F,Jx,Jy,Jxy]')
PlotFig(InpData,GeoDat); % рисуем сечения
Характеристики сечений (из таблиц или посчитанные):
No      xc0      yc0       F           Jx          Jy         Jxy
 1    25.00     1.50   150.00      112.50    31250.00        0.00
 2     5.50    10.00    28.90     2030.00      155.00        0.00
 3     1.54     6.00    13.30      304.00       31.20        0.00
 4     4.63     4.63    54.79     1290.24     1290.24     -771.00
 5     2.03     4.49    18.00      363.68      119.79     -121.00
 6    -1.26     2.92     7.86       65.28       19.67       20.54

Проверьте, правильно ли ввелись ваши исходные данные. Если да, то можете переходить к следующему пункту.

Нахождение центральных и главных центральных осей инерции

В последней таблице приведены взятые из таблиц (или посчитанные) моменты инерции относительно центра тяжести для фигур, положение которых показано на рис.1-6. У нас же некоторые из фигур повёрнуты на угол αk. При таком повороте новые моменты инерции относительно центра тяжести вычисляются через старые по формулам:

Здесь Jxk, Jyk и Jxyk − моменты инерции неповёрнутого k-го сечения, Jx1k, Jy1k и Jxy1k − моменты инерции повёрнутого k-го сечения, αk − угол поворота k-го сечения.

Координаты центров тяжести сечений в этой таблице также записаны для неповёрнутых фигур и относительно их точки привязки. У нас же каждая фигура может быть повёрнута и смещена. Для вычисления новых координат центра тяжести через старые применяются формулы поворота и параллельного переноса:

Здесь xc0k, yc0k − координаты центра тяжести k фигуры относительно её точки привязки (старые); xc1k, yc1k − координаты центра тяжести k фигуры относительно начала нашей системы координат (новые); x0k, y0k − координаты точки привязки k фигуры в нашей системе координат. Считаем по формулам (1-5) и печатаем результаты.

a=InpData(:,7); % углы поворота
Xc1=Xc0.*cos(a)-Yc0.*sin(a)+InpData(:,5);
Yc1=Xc0.*sin(a)+Yc0.*cos(a)+InpData(:,6);
Jx1=Jx.*cos(a).^2+Jy.*sin(a).^2+Jxy.*sin(2*a);
Jy1=Jy.*cos(a).^2+Jx.*sin(a).^2-Jxy.*sin(2*a);
Jxy1=Jxy.*cos(2*a)+1/2*(Jy-Jx).*sin(2*a);
disp('Характеристики сечений после поворота фигур и переноса начала:')
disp(['No      xc1      yc1' ...
  '      F          Jx1         ' ...
  'Jy1         Jxy1'])
fprintf('%2.0f   %6.2f   %6.2f   %6.2f   %9.2f   %9.2f   %9.2f\n',...
  [[1:n]',Xc1,Yc1,F,Jx1,Jy1,Jxy1]')
Характеристики сечений после поворота фигур и переноса начала:
No      xc1      yc1      F          Jx1         Jy1         Jxy1
 1    25.00     1.50   150.00      112.50    31250.00        0.00
 2     5.50    13.00    28.90     2030.00      155.00        0.00
 3    25.00     4.54    13.30       31.20      304.00       -0.00
 4    45.37    -4.63    54.79     1290.24     1290.24     -771.00
 5     4.49    -2.03    18.00      119.79      363.68      121.00
 6    48.74     5.92     7.86       65.28       19.67       20.54

Находим центр тяжести сечения по формулам

Здесь xc1k, yc1k − координаты центра тяжести k фигуры, Fk − её площадь; xc, yc − координаты центра тяжести всего сечения. Считаем по формулам (6-7):

xc0=sum(Xc1.*F)/sum(F);
yc0=sum(Yc1.*F)/sum(F);
disp('Центр тяжести сечения:')
fprintf(['xc=%6.2f (см); '...
  'yc=%6.2f (см).\n'],xc0,yc0)
Центр тяжести сечения:
xc= 26.36 (см); yc=  1.53 (см).

Перенесём начало координат в найденную точку. Оси полученной системы координат называются центральными (пока ещё не главными центральными, а просто центральными). Для такого переноса нужно из координат центра тяжести каждой фигуры xc1k, yc1k отнять координаты общего центра тяжести xc, yc:

Кроме того, вычислим моменты инерции каждой фигуры относительно общего центра тяжести xc, yc. Для этого применяем формулы:

Вычисляем:

Xc=Xc1-xc0;
Yc=Yc1-yc0;
Jx=Jx1+F.*Yc.^2;
Jy=Jy1+F.*Xc.^2;
Jxy=Jxy1+F.*Xc.*Yc;
disp('Характеристики сечений в новой системе координат:')
disp(['No      xc       yc'...
  '       F           Jx          ' ...
  'Jy          Jxy'])
fprintf('%2.0f   %6.2f   %6.2f   %6.2f   %9.2f   %9.2f   %9.2f\n',...
  [[1:n]',Xc,Yc,F,Jx,Jy,Jxy]')
Характеристики сечений в новой системе координат:
No      xc       yc       F           Jx          Jy          Jxy
 1    -1.36    -0.03   150.00      112.63    31525.74        6.05
 2   -20.86    11.47    28.90     5832.27    12725.51    -6913.50
 3    -1.36     3.01    13.30      151.72      328.45      -54.28
 4    19.01    -6.16    54.79     3369.12    21098.94    -7188.16
 5   -21.87    -3.56    18.00      347.88     8969.74     1522.07
 6    22.38     4.39     7.86      216.78     3957.93      792.96

Находим общие моменты инерции всего сечения − это суммы моментов инерции отдельных профилей:

SJx=sum(Jx);
SJy=sum(Jy);
SJxy=sum(Jxy);
disp('Суммарные моменты инерции сечения:')
fprintf(['Jx=%9.2f (см^4); ' ...
  'Jy=%9.2f (см^4); ' ...
  'Jxy=%9.2f (см^4)\n'],...
  SJx,SJy,SJxy)
Суммарные моменты инерции сечения:
Jx= 10030.40 (см^4); Jy= 78606.31 (см^4); Jxy=-11834.86 (см^4)

Теперь переходим к нахождению главных центральных осей инерции и главных моментов инерции. Мы знаем, что при повороте сечения на угол α моменты инерции изменяются по формулам (1-3). При повороте на некоторый угол можно добиться того, что центробежный момент инерции станет равным нулю. Полученные оси и называются главными центральными. Соответствующий угол поворота получим, приравнивая выражение (3) нулю (конечно, не для отдельного профиля, а уже для всего сечения):

Обозначим полученные главные центральные оси uOv. В этой системе моменты инерции (они называются главными) будут определяться по формулам типа (1-3), но с отрицательным α, т.к. мы поворачиваем не профиль, а оси:

Если всё правильно проделано, должно получиться Juv = 0. Главные центральные моменты инерции обладают тем свойством, что Ju − это минимальный из всех возможных осевых моментов инерции, а Jv − максимальный. Находим положение главных центральных осей и значения главных моментов инерции:

tg2a=2*SJxy/(SJy-SJx);
alpha=atan(tg2a)/2;
disp('Главные центральные оси инерции:')
fprintf(['alpha=%5.2f (рад) ' ...
  '= %5.2f (град)\n'],alpha,alpha*180/pi)
Ju=SJx*cos(alpha)^2+SJy*sin(alpha)^2-SJxy*sin(2*alpha);
Jv=SJy*cos(alpha)^2+SJx*sin(alpha)^2+SJxy*sin(2*alpha);
Juv=SJxy*cos(2*alpha)-1/2*(SJy-SJx)*sin(2*alpha);
disp('Главные центральные моменты инерции:')
fprintf(['Ju=%9.2f (см^4); ' ...
  'Jv=%9.2f (см^4); ' ...
  'Juv=%9.2f (см^4)\n'],Ju,Jv,Juv)
Главные центральные оси инерции:
alpha=-0.17 (рад) = -9.52 (град)
Главные центральные моменты инерции:
Ju=  8045.39 (см^4); Jv= 80591.32 (см^4); Juv=     0.00 (см^4)

И, наконец, осталось нарисовать нашу конструкцию в системе центральных осей, показать на ней положение главных центральных осей, и нарисовать центры тяжести отдельных фигур.

InpData1=InpData; % сохранили данные
InpData1(:,5)=InpData(:,5)-xc0; % сдвиг осей
InpData1(:,6)=InpData(:,6)-yc0;
[xx,yy]=PlotFig(InpData1,GeoDat); % рисуем
xm=max(abs(xx)); % узнали размеры
ym=max(abs(yy));
um1=xm*cos(alpha);
um2=xm*sin(alpha);
vm1=ym*cos(alpha);
vm2=-ym*sin(alpha);
hold on
for kk=1:n, % рисуем центры тяжести
  plot(Xc(kk),Yc(kk),'xr')
end
plot([um1 -um1],[um2 -um2],'-m') % рисуем оси
plot([vm2 -vm2],[vm1 -vm1],'-m')
text(um1,um2,'\itU')
text(vm2,vm1,'\itV')
hold off

Что делать дальше

Теперь вы можете скопировать содержимое этой страницы (через ClipBoard), перебросить его, например, в Office-Word, выбросить всё лишнее и распечатать. Осталось повторить теорию, и можно идти сдавать задание преподавателю.

Литература

  1. Справочник по сопротивлению материалов / Писаренко Г.С., Яковлев А.П., Матвеев В.В.: Отв. Ред. Писаренко Г.С. - 2-е изд., перераб. И доп. - Киев: Наукова думка, 1988. - 7736 с. - ISSN 5-12-000299-4.