Перейти к содержанию

М2 §5. Устойчивая башня: почему падает то, что стояло

Вопросы к М2 §5

Поставьте на стол четыре одинаковых бруска один на другой — ровной колонной. Толкните верхний вбок на сантиметр, потом ещё на сантиметр. Сначала ничего не происходит. Потом, на каком-то сдвиге, башня без предупреждения валится.

Всё это время сумма сил, действующих на башню, была равна нулю: сила тяжести тянула вниз, опора давила вверх ровно с той же величиной. Условие равновесия из М2 §2 и М2 §3 выполнялось до последнего мгновения — и не спасло.

Значит, чего-то в нашем аппарате не хватает. Четыре предыдущих параграфа модуля мы прикладывали все силы к одной точке: тело было материальной точкой, у него не было ни ширины, ни высоты. Башня — не точка. У неё есть основание, есть ребро, через которое она перевалится, и есть особая точка внутри, через которую всё решается.

Три вопроса, на которые отвечает этот параграф.

  1. Физика. Равнодействующая равна нулю, а тело падает. Какое условие мы пропустили и как оно выглядит для тела, у которого есть размеры?
  2. Математика. Как посчитать положение той самой особой точки для составной конструкции — и как перевести чертёж в числа так, чтобы по нему можно было измерять силы линейкой?
  3. Информатика. Как найти точный сдвиг, при котором башня падает, если перебирать варианты руками — час работы, и как проверить, что физический движок и наш расчёт говорят одно и то же?

Обещать, что будет легко, не станем: понятий здесь вводится десять. Обещаем другое — к концу параграфа вы сможете про любую конструкцию сказать заранее, упадёт она или устоит, и подтвердить ответ тремя независимыми способами: расчётом, чертежом и симулятором.


М2 §5.1. Физика: башня — не точка

Модель материальной точки, которой мы пользовались в М2 §1 — М2 §4, устроена так: всю массу тела мысленно собирают в одну точку, а размерами пренебрегают. Для санок, которые тянут по снегу, это работает прекрасно: сила приложена, трение приложено, ответ получается верный.

Но у точки нет площадки, на которой она стоит. Точка не может «перевалиться через край» — переваливаться нечему. Как только вопрос звучит «упадёт или устоит», модель материальной точки перестаёт отвечать: она отвечает только на вопрос «поедет или останется на месте».

Поэтому здесь мы впервые сохраняем телу размеры. У башни есть основание шириной 8 см и высота 16 см, и оба числа войдут в ответ. А вот силу тяжести всё-таки удобно прикладывать к одной точке — только теперь надо честно сказать, к какой именно.


Центр тяжести

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

Центром тяжести тела называют точку, в которую можно приложить одну-единственную силу тяжести всего тела, чтобы она действовала так же, как все силы тяжести его частей вместе.

Обозначаем центр тяжести заглавной буквой C (строчная c у нас уже занята ценой деления прибора). Величина этой одной силы известна из М2 §1: \(F_{тяж} = mg\), где \(m\) — масса всего тела, а \(g = 10\) Н/кг — коэффициент силы тяжести.

Оговорка на будущее. В книгах вам встретится и «центр масс». Различить эти две точки можно только там, где притяжение неодинаково в разных частях тела — например, у тела размером с гору. В школьных задачах, и в этой главе тоже, они совпадают, и мы говорим «центр тяжести».


Где эта точка находится

Первое, что хочется сказать про центр тяжести: он где-то в середине тела. Для однородного бруска это верно — точка ровно в геометрическом центре. Но «в середине» и «внутри вещества» — не одно и то же.

Возьмите кольцо. Его центр тяжести — в центре кольца, то есть в дырке: там, где вещества нет вовсе. Возьмите рамку от картины, обруч, бублик — то же самое. Возьмите фигуру в форме буквы «Г»: её центр тяжести лежит в вырезанном углу, снаружи фигуры.

Это не парадокс, а прямое следствие определения. Центр тяжести — точка приложения замещающей силы, а не «место, где сидит вещество». Проверить положение C у плоской фигуры можно руками, без всякого расчёта: подвесьте фигуру на нитке за любую точку края и отметьте на ней линию, вдоль которой натянута нить; подвесьте за другую точку и отметьте вторую линию. Пересечение линий и есть центр тяжести.

Для кольца и для буквы «Г» пересечение окажется в пустоте, и карандашу там не за что зацепиться. Делают так: кладут фигуру на лист бумаги, каждую линию прочерчивают не только по фигуре, но и продолжают на лист, а потом снимают фигуру. Точка отметится на бумаге — и это правильный ответ, а не признак ошибки.

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


Центр тяжести составной башни

Башня из четырёх блоков — четыре тела, у каждого свой известный центр тяжести (блок однородный, значит в геометрическом центре) и своя масса. Нужна одна точка на всех.

Ответ даёт взвешенное среднее, с которым вы уже работали в математике: координаты центров блоков усредняются, но с весами — и весами служат массы.

\[x_C = \frac{m_1 x_1 + m_2 x_2 + \ldots + m_n x_n}{m_1 + m_2 + \ldots + m_n}, \qquad y_C = \frac{m_1 y_1 + m_2 y_2 + \ldots + m_n y_n}{m_1 + m_2 + \ldots + m_n}\]

Если все массы одинаковы, они выносятся за скобку и сокращаются — остаётся обычное арифметическое среднее координат. Это важный частный случай: у стопки одинаковых книг C находится в среднем арифметическом их центров.

Возьмём конкретную башню, с которой будем работать до конца параграфа. Четыре блока одной формы: ширина 8 см, высота 4 см. Материалы разные, поэтому массы разные: снизу вверх 500 г, 300 г, 150 г, 50 г (гипс, дерево, пластик, пенопласт). Начало координат — на столе, посередине нижнего блока; ось \(x\) — вдоль стола вправо, ось \(y\) — вверх.

Все размеры и сдвиги мы выставляем линейкой, а линейка честно даёт десятые доли сантиметра. Объявляем точность заранее: 0,1 см. Это относится и к исходным числам, и ко всем ответам, которые из них получатся.

Каждый следующий блок сдвинут вправо относительно предыдущего на 2 см. Тогда центры блоков:

блок масса, кг \(x\), см \(y\), см
1 (нижний) 0,50 0 2
2 0,30 2 6
3 0,15 4 10
4 (верхний) 0,05 6 14

Считаем по формуле:

\[x_C = \frac{0{,}50 \cdot 0 + 0{,}30 \cdot 2 + 0{,}15 \cdot 4 + 0{,}05 \cdot 6}{0{,}50 + 0{,}30 + 0{,}15 + 0{,}05} = \frac{1{,}5}{1{,}0} = 1{,}5 \text{ см}\]
\[y_C = \frac{0{,}50 \cdot 2 + 0{,}30 \cdot 6 + 0{,}15 \cdot 10 + 0{,}05 \cdot 14}{1{,}0} = \frac{5{,}0}{1{,}0} = 5{,}0 \text{ см}\]

Центр тяжести башни — точка C (1,5; 5,0) см. Масса всей башни 1,0 кг, значит из этой точки вниз тянет одна сила \(F_{тяж} = 1{,}0 \cdot 10 = 10\) Н.


Тот же расчёт программой

Считать взвешенное среднее руками для четырёх блоков терпимо, для двенадцати — уже нет, а менять сдвиги нам придётся десятки раз. Оформим расчёт функцией. Два списка координат и один список масс проходим одним циклом, соединяя их zip.

def center_of_gravity(masses, xs, ys):
    total = 0.0
    sum_x = 0.0
    sum_y = 0.0
    for m, x, y in zip(masses, xs, ys):
        total = total + m
        sum_x = sum_x + m * x
        sum_y = sum_y + m * y
    return sum_x / total, sum_y / total

masses = [0.50, 0.30, 0.15, 0.05]   # кг, снизу вверх
xs = [0.0, 2.0, 4.0, 6.0]           # см, центры блоков по горизонтали
ys = [2.0, 6.0, 10.0, 14.0]         # см, центры блоков по высоте

x_c, y_c = center_of_gravity(masses, xs, ys)

total_mass = 0.0
for m in masses:
    total_mass = total_mass + m

print(f"C = ({x_c:.2f}; {y_c:.2f}) см")
print(f"масса башни = {total_mass:.2f} кг")
C = (1.50; 5.00) см
масса башни = 1.00 кг

Новое здесь одно: в строке return через запятую стоят две величины. Функция отдаёт их вместе, парой, и принять их надо тоже в два имени сразу — x_c, y_c = center_of_gravity(...). Порядок имён слева от знака равенства соответствует порядку величин в return: первое имя получает первое число, второе — второе.

Обратите внимание: ни ширина блока, ни его высота в расчёт не вошли. Форма блоков нужна нам дальше, для площади опоры, а для центра тяжести достаточно масс и координат центров.


Площадь опоры и ребро опрокидывания

Теперь про то, на чём башня стоит.

Площадь опоры — область на поверхности опоры, ограниченная крайними точками касания тела с опорой. Границу этой области называют опорным контуром: контур — это линия по краю, площадь опоры — всё, что она охватывает.

У кирпича, лежащего на столе плашмя, площадь опоры — весь прямоугольник нижней грани. У стеллажа на четырёх ножках — четырёхугольник, натянутый на ножки; в него входит и пустота между ножками, хотя там стеллаж стола не касается. У велосипеда — узкая полоска между двумя пятнами колёс. У дорожного конуса — круг его основания.

Кирпич лежит плашмя; из его центра вниз идёт стрелка силы тяжести 10 Н, снизу вверх — стрелка реакции опоры 10 Н; нижняя грань подписана как площадь опоры, центр — как точка C

Кирпич на столе: центр тяжести C, площадь опоры — нижняя грань, вертикаль через C проходит внутри опоры

Площадь опоры отвечает на вопрос: где телу разрешено стоять. Но когда тело падает, оно не проваливается сквозь опору и не улетает — оно поворачивается через один определённый край контура.

Ребро опрокидывания — та граница опорного контура, вокруг которой тело поворачивается при опрокидывании.

Рёбер у контура несколько: у кирпича их четыре, у конуса — вся окружность основания. Работает всегда одно — то, к которому тело клонится. Толкнули башню вправо — работает правое ребро; наклонили стол влево — левое. Знать контур мало, надо ещё выбрать ребро; поэтому это два разных понятия, а не одно.

Для нашей башни всё просто: она стоит на нижнем блоке шириной 8 см, значит на чертеже (мы смотрим сбоку, разрез) площадь опоры — отрезок от \(x = -4\) см до \(x = +4\) см. Левое ребро: \(x = -4\) см. Правое ребро: \(x = +4\) см.


М2 §5.2. Физика: критерий «стоит или падает»

Разберём главный сюжет параграфа честно и медленно.

На стоящую башню действуют две силы. Сила тяжести \(F_{тяж} = 10\) Н приложена в C и направлена вниз. Реакция опоры \(N\) приложена со стороны стола и направлена вверх. Пока башня покоится, эти силы равны по модулю и противоположны по направлению — их сумма нулевой вектор, ровно как в М2 §2. Равновесие.

Теперь сдвигаем блоки вправо, шаг за шагом. Сила тяжести не меняется: масса та же. Реакция опоры не меняется: башня по-прежнему давит на стол весом 10 Н. Сумма сил как была нулём, так и остаётся. И в какой-то момент башня валится.

Значит, вывод из М2 §2 и М2 §3 — «сумма сил равна нулю, тело покоится» — для тела с размерами необходим, но недостаточен. Он гарантирует, что тело не поедет по столу как целое. Он ничего не говорит о повороте.

Причина в том, что стол умеет давить только снизу и только внутри площади опоры. Реакция опоры набирается из миллиона маленьких сил, распределённых по площадке касания, и вся эта сумма приложена где-то между левым и правым рёбрами — за пределы контура ей выйти неоткуда. Пока вертикаль, проведённая через C вниз, попадает внутрь опоры, опора «ловит» линию действия силы тяжести и держит башню. Как только вертикаль вышла за ребро, ловить нечем: сила тяжести тянет вниз с одной стороны от ребра, а опора подпирает только с другой, и башня поворачивается через ребро.

Наклонная поверхность, на ней три одинаковых бруска в трёх положениях; у каждого из центра вниз идёт стрелка силы тяжести; подписи под брусками: стоит, критическое, падает

Три положения одного тела: вертикаль через C внутри опоры — стоит; ровно на ребре — критическое; за ребром — падает


Правило

Устойчивость к опрокидыванию. Тело не опрокидывается, пока вертикаль, проведённая через центр тяжести, проходит внутри площади опоры. Если вертикаль выходит за ребро опоры — тело опрокидывается через это ребро. Вертикаль ровно на ребре — критическое положение: тело на грани.

Проверить правило можно двумя независимыми способами, и оба вам доступны прямо сейчас: собрать башню на столе и двигать блоки, отмечая карандашом положение C; собрать ту же башню в физическом симуляторе (§5.4) и запустить время. Оба способа дают один ответ.

Пока это для нас экспериментальный факт, а не теорема. Доказать его можно — но для доказательства нужно понятие момента силы, произведения силы на плечо, а момент появится в М4 §3, когда мы возьмёмся за рычаг. Там это правило будет выведено, а не принято на веру: вы увидите, что момент силы тяжести относительно ребра либо возвращает тело на место, либо валит его, и знак момента как раз определяется тем, с какой стороны от ребра прошла вертикаль. Мы не прячем от вас, что должны доказательство; мы говорим, где его отдадим.


Запас устойчивости

Правило отвечает «да» или «нет». Инженеру этого мало: ему нужно знать, насколько близко к краю стоит конструкция.

Запас устойчивости \(d_{уст}\) — расстояние по горизонтали от вертикали через центр тяжести до ближайшего ребра опрокидывания.

Буква выбрана не случайно: d в математике обозначает расстояние (вспомните формулу расстояния между точками), а нижний индекс «уст» говорит, какое именно расстояние имеется в виду. Это отдельное обозначение, а не переопределение старого: d остаётся расстоянием вообще, \(d_{уст}\) — конкретное расстояние в конкретной задаче.

Считается запас как разность координат — вертикаль через C имеет уравнение \(x = x_C\), рёбра стоят при \(x = x_{лев}\) и \(x = x_{прав}\):

\[d_{уст} = \min\big(x_C - x_{лев},\; x_{прав} - x_C\big)\]

Запись \(\min(\ldots)\) читается «наименьшее из перечисленного» и означает ровно то, что говорит: из чисел в скобках берут меньшее. Например, \(\min(5{,}5;\ 2{,}5) = 2{,}5\). В Python есть встроенная функция с тем же именем и тем же смыслом: min(5.5, 2.5) вернёт 2.5, min(a, b) — меньшее из двух значений. Она короче, чем if a < b: ... else: ..., а делает то же самое; дальше мы пользуемся именно ей.

Знак содержателен. Положительный запас — вертикаль внутри опоры, тело стоит; ноль — критическое положение; отрицательный — вертикаль вышла наружу, тело падает, а модуль числа показывает, насколько далеко она вышла.


Считаем запас нашей башни

У нас \(x_C = 1{,}5\) см, рёбра при \(x = -4\) см и \(x = +4\) см.

\[x_C - x_{лев} = 1{,}5 - (-4) = 5{,}5 \text{ см}, \qquad x_{прав} - x_C = 4 - 1{,}5 = 2{,}5 \text{ см}\]

Меньшее из двух: \(d_{уст} = \min(5{,}5;\ 2{,}5) = 2{,}5\) см. Ближайшее ребро — правое, значит именно через него башня и повалится, если сдвинуть блоки ещё.

Ответ полагается округлять по объявленной точности. Координаты блоков мы задавали с точностью 0,1 см — объявили это в §5.1, до вычислений, — поэтому запас имеет смысл писать как \(d_{уст} \approx 2{,}5\) см, а не 2,5000 см: лишние знаки обещают точность, которой у измерения нет.

Координатная плоскость в сантиметрах; из точки C с координатами 1,5 и 5,0 вниз до оси x проведена вертикаль через C, пунктиры показывают обе координаты точки C

Вертикаль через центр тяжести башни: x_C = 1,5 см, до правого ребра опоры (x = 4 см) остаётся d_уст = 2,5 см


Вердикт программой

Оформим правило функцией, чтобы дальше проверять десятки вариантов, не считая руками.

def margin(x_c, x_left, x_right):
    return min(x_c - x_left, x_right - x_c)

def verdict(d, tol=0.01):
    if abs(d) <= tol:
        return "на грани"
    if d > 0:
        return "стоит"
    return "падает"

x_left = -4.0
x_right = 4.0

for x_c in [1.5, 3.6, 4.0, 5.2]:
    d = margin(x_c, x_left, x_right)
    print(f"x_C = {x_c:5.2f} см   d_уст = {d:6.2f} см   {verdict(d)}")
x_C =  1.50 см   d_уст =   2.50 см   стоит
x_C =  3.60 см   d_уст =   0.40 см   стоит
x_C =  4.00 см   d_уст =   0.00 см   на грани
x_C =  5.20 см   d_уст =  -1.20 см   падает

Две мелочи записи, которые встречаются здесь впервые.

Запись tol=0.01 в заголовке функции — значение по умолчанию: если вызвать verdict(d) с одним аргументом, второй возьмётся равным 0,01; если написать verdict(d, 0.001) — возьмётся 0,001. Так задают величину, которую меняют редко, но иногда всё же надо.

В f-строке {d:6.2f} первое число — ширина поля в знаках: число прижимается вправо и колонки в таблице выстраиваются ровно. .2f — уже знакомое округление до двух знаков после запятой.

Про сам допуск tol. Сравнивать вещественные числа знаком == нельзя — об этом шла речь ещё в М1 §1: число хранится в конечном числе разрядов, и вычисленное значение почти никогда не равно ожидаемому в точности. Здесь у допуска есть и физический смысл: 0,01 см — это 0,1 мм, точнее ни одна школьная линейка положение ребра не покажет. Так что «на грани» у нас означает «отличается от нуля меньше, чем мы способны измерить», и это честнее, чем требовать математического нуля.


Три ходовых заблуждения

«Чем тяжелее конструкция, тем она устойчивее». Посмотрите на критерий ещё раз: в нём нет ни массы, ни силы тяжести — только координаты. Умножьте все массы башни на десять: во взвешенном среднем общий множитель сократится, \(x_C\) не сдвинется ни на миллиметр, и башня упадёт при том же самом сдвиге. Тяжёлая узкая колонна падает, лёгкая широкая стоит.

Масса всё же важна — но не своей величиной, а тем, где она сидит. Насыпьте песка в нижний блок — C опустится и сдвинется к центру, устойчивость вырастет. Положите тот же песок наверх — C поднимется и уедет вбок, устойчивость упадёт. Именно поэтому в грузовик тяжёлое кладут вниз, а не сверху.

«Пока свесилось меньше половины — стоит, больше половины — падает». Доля свисающей площади не решает ничего. У нашей башни верхний блок свисает за правое ребро нижнего на три четверти своей ширины — его левый край при \(x = 2\) см, правый при \(x = 10\) см, ребро на \(x = 4\) см, значит над опорой остались всего 2 см из 8, — и башня всё равно стоит, потому что вертикаль через общий C проходит внутри опоры. Считать надо C, а не долю свеса.

«Если равнодействующая ноль, упасть невозможно». Это тот случай, который мы разбирали выше. Нулевая равнодействующая запрещает телу разгоняться как целому; повернуться через ребро она не запрещает.


Наклон: что наступит раньше — скольжение или опрокидывание

Всё сказанное до сих пор — про опрокидывание. Но тело на наклонной поверхности может и просто поехать, так и не начав поворачиваться: этим сюжетом занимался М2 §4. Когда наклон растёт, наступает то из двух, для чего порог ниже. Значит, нужны оба порога.

Скольжение. Из М2 §4: тело трогается с места, когда уклон превышает коэффициент трения покоя \(\mu\). Уклоном мы, как и в математике, называем отношение подъёма к горизонтальному пробегу: склон «3 : 4» имеет уклон 0,75.

Опрокидывание. Здесь работает то же правило вертикали, просто теперь пол наклонён. Обозначим:

  • \(h\) — расстояние от C до поверхности склона, отмеренное по перпендикуляру к ней;
  • \(b\) — расстояние от C до нижнего ребра, отмеренное вдоль поверхности.

Опустим из C две линии: перпендикуляр к склону (длиной \(h\)) и настоящую вертикаль. На ровном полу они совпадают, на наклонном — расходятся, и угол между ними ровно такой же, как угол склона с горизонтом. Эти две линии вместе с поверхностью склона отсекают прямоугольный треугольник, подобный треугольнику самого склона: его катеты относятся так же, как подъём к пробегу. Один катет — наш перпендикуляр длиной \(h\), другой лежит на склоне, и его длина равна \(h \cdot (\text{уклон})\).

Это и есть смещение: вертикаль встречает склон не под самой точкой C, а ниже по склону на \(h \cdot (\text{уклон})\). Пока смещение меньше \(b\), вертикаль остаётся внутри опоры.

\[h \cdot (\text{уклон}) < b \quad\Longleftrightarrow\quad \text{уклон} < \frac{b}{h}\]

Итак, опрокидывание начинается, когда уклон превысит отношение \(b/h\). Отношение это чисто геометрическое: чем шире тело и чем ниже сидит его центр тяжести, тем круче должен быть склон.

Сравниваем два числа. Для нашей башни, поставленной ровно (\(x_C = 0\), \(y_C = 5{,}0\) см), это \(b = 4\) см, \(h = 5\) см, \(b/h = 0{,}8\). На гладкой столешнице с \(\mu = 0{,}3\) башня уедет задолго до того, как начнёт валиться: 0,3 меньше 0,8. На резиновом коврике с \(\mu = 0{,}9\) — сначала опрокинется. Всякий раз, говоря «опрокинется при таком-то наклоне», проверяйте, что раньше не наступит скольжение, и наоборот.


Сначала предсказание, потом запуск

Ниже программа. Рёбра опоры на \(x = \pm 4\) см. Не запускайте её сразу. Возьмите листок и напишите три строки вывода — что именно напечатается для каждого значения. Потом наберите код и сверьте.

def margin(x_c, x_left, x_right):
    return min(x_c - x_left, x_right - x_c)

def verdict(d, tol=0.01):
    if abs(d) <= tol:
        return "на грани"
    if d > 0:
        return "стоит"
    return "падает"

for x_c in [3.995, 4.005, -4.20]:
    d = margin(x_c, -4.0, 4.0)
    print(f"x_C = {x_c:6.3f}  ->  {d:+.3f} см, {verdict(d)}")

Подсказка к записи {d:+.3f}: знак + требует печатать знак числа всегда, а не только у отрицательных, — так плюс и минус видно с одного взгляда.

Вопросы к предсказанию: почему третья строка — про левое ребро, а не про правое? Что изменится в ответе, если поставить tol = 0.001? Какое из трёх положений вы физически не отличите от критического обычной линейкой?


М2 §5.3. Математика: диаграмма в масштабе

В М2 §1 — М2 §3 мы уже рисовали силы стрелками, но чертёж был иллюстрацией: длина стрелки означала «побольше» или «поменьше». Пора сделать из чертежа измерительный прибор.

Векторная диаграмма — чертёж, на котором каждая сила изображена вектором, а длина вектора связана с величиной силы объявленным правилом пересчёта. По такой диаграмме силу можно измерить линейкой.

Масштабный коэффициент — число, показывающее, сколько единиц изображаемой величины приходится на одну единицу длины чертежа.

Записываем масштаб словами, прямо на чертеже: 1 см ⇔ 2 Н. Знак ⇔ читается «отвечает»: одному сантиметру чертежа отвечает 2 Н силы. Это значит: сила 12 Н рисуется отрезком длиной 6 см, сила 7,2 Н — отрезком 3,6 см. Обратно: намерили на чертеже 4,8 см — значит сила 9,6 Н.

Масштаб обязан быть объявлен. Диаграмма без объявленного масштаба — картинка, по ней ничего измерить нельзя; ровно как график без подписей осей.

Тот же приём работает не только с силами. Наш чертёж башни — тоже масштаб: 1 клетка тетради ⇔ 1 см настоящего блока. И когда мы будем рисовать башню черепахой, понадобится ещё один: 1 см ⇔ 10 шагов черепахи. Разные величины, одна идея.


Диаграмма для бруска на склоне

Башню мы на минуту оставим — и вот почему. Чтобы диаграмма чему-то научила, нужен случай, где сил больше двух и направлены они не вдоль одной прямой; у стоящей башни сил всего две, и чертить там нечего. Возьмём брусок на склоне, а к башне вернёмся в конце параграфа — тот же масштабный коэффициент понадобится, когда её будет чертить черепаха.

Брусок массой 1,2 кг стоит на склоне с уклоном 3 : 4 — на каждые 4 клетки вдоль горизонтали склон поднимается на 3 клетки. Ширина бруска 8 см, высота 10 см, центр тяжести в его геометрическом центре. Коэффициент трения покоя между бруском и склоном \(\mu = 0{,}8\). Брусок покоится. Какие силы на него действуют и чему они равны?

Сила тяжести: \(F_{тяж} = 1{,}2 \cdot 10 = 12\) Н, направлена вертикально вниз из точки C.

Разложим её на две составляющие, как в М2 §3: вдоль склона и перпендикулярно ему. Треугольник склона со сторонами 3 и 4 имеет гипотенузу 5 (проверьте: \(3^2 + 4^2 = 5^2\)), и треугольник разложения ему подобен. Значит составляющие относятся к силе тяжести как 3 : 5 и 4 : 5:

\[F_{\parallel} = 12 \cdot \frac{3}{5} = 7{,}2 \text{ Н (вдоль склона, вниз)}, \qquad F_{\perp} = 12 \cdot \frac{4}{5} = 9{,}6 \text{ Н (в склон)}\]

Брусок покоится, значит каждой составляющей есть противовес. Склон отвечает реакцией опоры \(N = 9{,}6\) Н перпендикулярно поверхности, трение покоя отвечает силой \(F_{тр} = 7{,}2\) Н вдоль склона вверх.

Проверим, что трения хватает: максимум, который оно может дать, равен \(\mu N = 0{,}8 \cdot 9{,}6 = 7{,}68\) Н, а требуется 7,2 Н. Хватает, брусок не скользит.

Проверим, не опрокидывается ли он. Работает критерий из §5.2: у бруска \(b = 4\) см (половина ширины), \(h = 5\) см (половина высоты), отношение \(b/h = 0{,}8\), уклон \(3/4 = 0{,}75\). Уклон меньше — не опрокидывается. Брусок стоит, но обе проверки прошёл впритык: чуть круче склон — и он либо поедет, либо перевалится.

Теперь диаграмма. Строим цепочкой по правилу многоугольника (М2 §3): от конца первого вектора откладываем второй, от его конца — третий. В масштабе 1 см ⇔ 2 Н получаем стороны 6 см, 4,8 см и 3,6 см. Цепочка замыкается — конец последнего вектора попадает в начало первого, — и это геометрическая запись того же факта: равнодействующая трёх сил равна нулевому вектору. Не замкнулась бы — отрезок, соединяющий конец с началом, и был бы равнодействующей, а брусок поехал бы.

Замкнутый треугольник из трёх векторов: сила тяжести 12 Н вниз, реакция опоры 9,6 Н перпендикулярно склону, сила трения 7,2 Н вдоль склона вверх; стороны 6, 4,8 и 3,6 см

Диаграмма сил для бруска на склоне 3 : 4 в масштабе 1 см ⇔ 2 Н: многоугольник замкнулся, равнодействующая равна нулю


Порядок построения

Пять шагов, которые стоит выполнять всегда в одном и том же порядке.

  1. Объявите масштаб и запишите его на чертеже: «1 см ⇔ 2 Н». Выбирайте так, чтобы самый длинный вектор поместился на лист и был не короче 4—5 см.
  2. Перечислите силы — все, что действуют на тело, и только на него. Не на опору, не на соседний блок.
  3. Переведите ньютоны в сантиметры: разделите каждую силу на масштаб. 12 Н : 2 Н/см = 6 см.
  4. Отложите векторы цепочкой, соблюдая направления: каждый следующий — от конца предыдущего.
  5. Проверьте замыкание. Замкнулось — равнодействующая ноль, тело в равновесии. Не замкнулось — измерьте отрезок замыкания линейкой и умножьте на масштаб: это и есть равнодействующая в ньютонах.

Пятый шаг и делает диаграмму инструментом: ответ получается измерением, а не вычислением, и служит независимой проверкой расчёта.


Чертёж башни черепахой

Тот же масштабный коэффициент — в программе. Черепаха рисует в шагах, башня задана в сантиметрах; переводим одним числом K.

Где запускать. Этому блоку нужно графическое окно, которого в Colab нет: набирайте и запускайте его в Replit. Текстового вывода у программы не будет вовсе — результат её работы это картинка. На экране вы увидите четыре прямоугольника, сложенных лесенкой вправо, вертикальную линию, опущенную из точки C до стола, и короткую отметку правого ребра опоры. Видно сразу: линия проходит левее отметки — башня стоит.

import turtle

K = 10.0        # масштаб: 1 см ⇔ 10 шагов черепахи
W = 8.0         # ширина блока, см
H = 4.0         # высота блока, см

t = turtle.Turtle()
t.speed(0)

def goto(x, y):
    t.penup()
    t.goto(K * x, K * y)
    t.pendown()

def block(x_center, y_bottom):
    goto(x_center - W / 2, y_bottom)
    t.setheading(0)
    t.forward(K * W)
    t.left(90)
    t.forward(K * H)
    t.left(90)
    t.forward(K * W)
    t.left(90)
    t.forward(K * H)

xs = [0.0, 2.0, 4.0, 6.0]
levels = [0.0, 4.0, 8.0, 12.0]

for x, y in zip(xs, levels):
    block(x, y)

# вертикаль через центр тяжести C = (1,5; 5,0)
t.color("red")
goto(1.5, 16.0)
t.setheading(270)
t.forward(K * 16.0)

# отметка правого ребра опоры
t.color("blue")
goto(4.0, -1.0)
t.setheading(90)
t.forward(K * 2.0)

turtle.done()

Поменяйте список xs на [0.0, 5.0, 10.0, 15.0] — и увидите, как красная линия уходит правее синей отметки. Это уже упавшая башня, только программа не умеет её ронять: рисунок показывает положение, а падение считает физический движок, к которому мы сейчас и перейдём.


М2 §5.4. Информатика: модель в симуляторе

Интерактивная модель — модель, параметры которой можно менять во время её работы и сразу видеть последствия, не переписывая и не перезапуская расчёт.

Разница с программами, которые мы писали до сих пор, вот в чём. В нашем коде, чтобы поменять сдвиг, надо отредактировать строку и запустить всё заново. В интерактивной модели вы тянете блок мышью — и картинка отвечает немедленно. Взамен вы теряете контроль: что именно движок считает внутри и с какой точностью, вы не видите.

Поэтому модель в симуляторе для нас — не замена расчёта, а второй, независимый источник чисел. Расчёт мы уже умеем делать полностью сами, и все выводы этого параграфа получены им. Симулятор добавляет наглядность и вторую цифру для сверки.


Сборка башни в Algodoo

Algodoo — двумерный физический движок: вы рисуете тела мышью, задаёте им массу и трение, нажимаете «пуск», и дальше он сам считает, что с ними произойдёт. Программа бесплатна для компьютера; скачивается с сайта algodoo.com, раздел загрузки, версии для Windows и macOS.

  1. Пол. Инструментом «прямоугольник» нарисуйте длинную плоскую плиту и сделайте её неподвижной (в свойствах объекта — «закрепить»). Это наш стол.
  2. Масштаб. Включите сетку. Договоритесь, что одна клетка — 1 см, и держитесь этого до конца: числа из расчёта и числа на экране должны быть в одних единицах.
  3. Первый блок. Нарисуйте прямоугольник 8 × 4 клетки. В свойствах задайте массу 0,50 кг и коэффициент трения 0,8 — иначе башня начнёт скользить и вы будете исследовать не то явление.
  4. Остальные три. Скопируйте блок трижды, задайте массы 0,30; 0,15; 0,05 кг, поставьте друг на друга и сдвиньте каждый следующий вправо на 2 клетки.
  5. Скрепите блоки. Инструментом «склеить» соедините соседние блоки. Это важное упрощение: скреплённая башня может опрокинуться только целиком, через ребро основания. Без склейки у неё появятся промежуточные рёбра — каждый блок сможет свалиться со своего соседа отдельно, и придётся проверять каждый ярус. Этим займёмся в задаче уровня 3.
  6. Пуск. Снимите паузу. Башня со сдвигом 2 см должна остаться стоять — ровно это предсказал наш расчёт: \(d_{уст} = 2{,}5\) см.
  7. Параметры. Поставьте паузу, увеличьте сдвиг каждого блока до 3 клеток, запустите снова. Потом до 4, до 5, до 6. Отмечайте, на каком сдвиге башня впервые упала. Наклон пола — второй параметр: поверните плиту на несколько градусов и посмотрите, что случится раньше — скольжение или опрокидывание.

Тот же опыт в Scratch. Собрать модель можно и там, но физического движка в Scratch нет: силу тяжести, поворот через ребро и остановку на опоре придётся запрограммировать самому. Порядок работы такой: сначала один спрайт-блок, который падает на пол и останавливается на нём; потом второй блок, который останавливается на первом; потом проверка вертикали через C — если она вышла за ребро, включаем поворот спрайта. Это заметно длиннее, чем весь остальной параграф, но каждое правило вы напишете руками и увидите его целиком — в Algodoo этого не видно. Числа для сверки берите те же.


Что движок делает внутри

Никакого волшебства внутри Algodoo нет, и вы уже видели этот приём. В М2 §4 мы считали движение бруска по шагам: взяли маленький промежуток времени, посчитали силы, пересчитали скорость и положение, повторили. Это и есть пошаговая модель с шагом по времени.

Движок делает то же самое, только с двумя отличиями. Первое: шаг \(\Delta t\) у него очень мал — порядка одной шестидесятой секунды и меньше, и таких шагов за секунду проходят десятки. Второе: кроме положения он пересчитывает ещё и поворот каждого тела — то самое вращение через ребро, которое мы описываем правилом, а он считает численно.

Отсюда важное следствие. Результат движка — не точный ответ, а результат многих маленьких приближений подряд. Он зависит от размера шага, от заданных коэффициентов трения, от того, как движок обрабатывает касание тел. Поэтому картинка на экране — не истина в последней инстанции, а второе измерение, которое надо сравнить с первым.


М2 §5.5. Информатика: критический сдвиг

Вопрос, ради которого писалась вся программа: при каком сдвиге башня падает?

Тянуть блоки мышью в симуляторе и на глаз ловить границу — занятие на полчаса, и точность выйдет «где-то между 5 и 6 сантиметрами». Расчёт даёт ответ точнее и быстрее.

Перебор параметра — приём, при котором задачу «при каком значении величины наступит событие» решают, прогоняя расчёт для целого ряда значений этой величины подряд и отслеживая, между какими соседними значениями результат изменился.

Уточним постановку. Пусть блоки сдвинуты ступенькой: каждый следующий смещён относительно предыдущего на одно и то же расстояние \(s\). Тогда центры блоков стоят в точках \(0,\; s,\; 2s,\; 3s\), а вся остальная геометрия — прежняя: рёбра при \(x = \pm 4\) см, массы 0,50; 0,30; 0,15; 0,05 кг. Блоки скреплены, падает вся башня целиком.

Подставим в формулу взвешенного среднего:

\[x_C = \frac{0{,}50 \cdot 0 + 0{,}30 \cdot s + 0{,}15 \cdot 2s + 0{,}05 \cdot 3s}{1{,}0} = (0{,}30 + 0{,}30 + 0{,}15)\, s = 0{,}75\, s\]

Проверка на известном случае: при \(s = 2\) см получаем \(x_C = 1{,}5\) см — совпало с §5.1. Значит запас

\[d_{уст} = 4 - 0{,}75\, s\]

и он обращается в ноль при \(s = 4 : 0{,}75 = 16/3 \approx 5{,}33\) см. Этот ответ мы теперь знаем аналитически — и именно поэтому он годится в проверку для программы: если перебор даст другое число, ошибка есть в одном из двух мест, и её надо найти.


Предсказание

Прежде чем запускать перебор, ответьте письменно.

masses = [0.50, 0.30, 0.15, 0.05]

def x_cg(shift):
    total = 0.0
    s = 0.0
    k = 0
    for m in masses:
        total = total + m
        s = s + m * k * shift
        k = k + 1
    return s / total

for shift in [4.0, 5.0, 6.0]:
    print(f"s = {shift:.1f} см -> x_C = {x_cg(shift):.2f} см")
  1. Какие три числа напечатает программа?
  2. При каком из трёх сдвигов башня уже упала?
  3. Верхний блок при \(s = 5\) см стоит центром в точке \(x = 15\) см — далеко за краем нижнего блока, у которого правое ребро на \(x = 4\) см. Почему при этом башня всё ещё стоит?

Запишите ответы, затем наберите код и проверьте.


Перебор с шагом 0,5 см

Пройдём сдвиг от нуля до 8 см с шагом полсантиметра и напечатаем таблицу. Программа сама отметит строку, где знак запаса сменился с плюса на минус.

masses = [0.50, 0.30, 0.15, 0.05]
x_right = 4.0

def x_cg(shift):
    total = 0.0
    total_x = 0.0
    k = 0
    for m in masses:
        total = total + m
        total_x = total_x + m * k * shift
        k = k + 1
    return total_x / total

def margin(shift):
    return x_right - x_cg(shift)

print(f"{'сдвиг, см':>10} {'запас, см':>11}")
prev_shift = 0.0
prev_d = margin(0.0)
for k in range(0, 17):
    shift = k * 0.5
    d = margin(shift)
    print(f"{shift:10.2f} {d:11.3f}")
    if d < 0 and prev_d >= 0:
        print(f"  -> знак сменился между {prev_shift:.2f} и {shift:.2f} см")
    prev_shift = shift
    prev_d = d
 сдвиг, см   запас, см
      0.00       4.000
      0.50       3.625
      1.00       3.250
      1.50       2.875
      2.00       2.500
      2.50       2.125
      3.00       1.750
      3.50       1.375
      4.00       1.000
      4.50       0.625
      5.00       0.250
      5.50      -0.125
  -> знак сменился между 5.00 и 5.50 см
      6.00      -0.500
      6.50      -0.875
      7.00      -1.250
      7.50      -1.625
      8.00      -2.000

Знак > в записи {'сдвиг, см':>10} означает «прижать вправо в поле шириной 10 знаков» — так шапка таблицы встаёт над колонками чисел.

Перебор с шагом 0,5 см загоняет ответ в вилку шириной полсантиметра. Чтобы сузить её вдесятеро, можно уменьшить шаг вдесятеро — тогда строк станет 160. Ещё вдесятеро — 1600 строк. Такой способ работает, но глупо: есть приём экономнее.

Убывающая прямая на осях: по горизонтали сдвиг ступеньки в сантиметрах, по вертикали запас устойчивости в сантиметрах; прямая пересекает горизонтальную ось около 5,33 см, дальше уходит в отрицательную область

Запас устойчивости как функция сдвига: d_уст = 4 − 0,75·s. Точка перехода через ноль — критический сдвиг s ≈ 5,33 см


Деление интервала пополам

Мы знаем: на левом конце вилки запас положительный, на правом отрицательный. Значит граница внутри. Возьмём середину, посчитаем запас — и отбросим ту половину, где границы точно нет. Повторим. Каждый шаг сокращает вилку вдвое.

masses = [0.50, 0.30, 0.15, 0.05]
x_right = 4.0

def margin(shift):
    total = 0.0
    total_x = 0.0
    k = 0
    for m in masses:
        total = total + m
        total_x = total_x + m * k * shift
        k = k + 1
    return x_right - total_x / total

lo = 5.0        # здесь башня ещё стоит
hi = 5.5        # здесь уже упала
steps = 0

while hi - lo > 0.001:
    mid = (lo + hi) / 2
    if margin(mid) > 0:
        lo = mid
    else:
        hi = mid
    steps = steps + 1

answer = (lo + hi) / 2
exact = 16 / 3
print(f"критический сдвиг: {answer:.3f} см")
print(f"шагов деления: {steps}")
print(f"точный ответ 16/3 = {exact:.3f} см")
print(f"расхождение: {abs(answer - exact):.4f} см")
критический сдвиг: 5.333 см
шагов деления: 9
точный ответ 16/3 = 5.333 см
расхождение: 0.0002 см

Обратите внимание на последнюю строку: мы не спрашиваем, равны ли два числа, — мы печатаем, насколько они различаются, и смотрим, укладывается ли разница в объявленную точность. Так и следует поступать с вещественными числами: у них конечное число разрядов хранения, и точное совпадение — редкая случайность, а не признак правильности (М1 §1).

Итак, критический сдвиг ступеньки для нашей башни — примерно 5,33 см. Дальше его надо проверить движком.


М2 §5.6. Информатика: расчёт против движка

Проверка модели — сравнение результата модели с результатом, полученным независимым способом: другим расчётом, экспериментом или другой моделью. Модель, ни разу не сверенная ни с чем внешним, ничего не доказывает.

У нас на руках три независимых источника ответа на один и тот же вопрос «при каком сдвиге падает башня»:

  1. Формула. \(s^* = 16/3 \approx 5{,}33\) см — получена из критерия аналитически.
  2. Перебор с уточнением. Та же величина, полученная программой численно. Это проверка формулы: два разных пути к одному числу.
  3. Симулятор. Число, при котором башня в Algodoo впервые повалилась. Это уже проверка самого критерия: движок про наше правило ничего не знает, он считает силы и повороты по шагам.

Третий источник и есть настоящая проверка. Первые два опираются на одну и ту же формулу и одну и ту же идею; если бы правило устойчивости было неверным, оба ошиблись бы одинаково.


Отчёт

Соберите таблицу. Числа во втором столбце вы вписываете со своего экрана: аккуратно увеличивайте сдвиг в модели, каждый раз запуская время заново, и найдите наименьший сдвиг, при котором башня падает.

calc = 5.333        # см, наш расчёт
engine = 0.0        # см, ВПИШИТЕ сюда число, полученное в симуляторе
tolerance = 0.2     # см, объявленная нами приемлемая разница

if engine <= 0.0:
    print("число из симулятора не вписано — сравнивать нечего")
else:
    gap = abs(calc - engine)
    print(f"расчёт:      {calc:.2f} см")
    print(f"движок:      {engine:.2f} см")
    print(f"расхождение: {gap:.2f} см")
    if gap <= tolerance:
        print("сходится в пределах объявленной точности")
    else:
        print("не сходится: ищите причину в обоих способах")

Проверка if engine <= 0.0 стоит здесь не зря: пока своё число вы не вписали, программа честно говорит, что сравнивать нечего, — вместо того чтобы выдать пугающее «не сходится» на пустом месте.

Строку tolerance = 0.2 нужно уметь защитить: почему именно два миллиметра? Потому что сдвиг в модели вы выставляете мышью с точностью примерно до половины клетки, а клетка у нас — сантиметр. Объявите свою точность заранее, до сравнения, — иначе допуск легко подогнать под уже полученный результат.


«Что показал Algodoo, то и правда»

Соблазн понятный: движок красиво роняет башню, картинка убедительная. Но расхождение с расчётом — не повод объявить расчёт неверным. Это повод искать ошибку в обоих, и вот наиболее вероятные её адреса.

  • Шаг по времени. Движок пересчитывает мир порциями \(\Delta t\). Если башня стоит на самой границе, за один шаг она может успеть «провалиться» в соседний блок и получить толчок, которого в реальности не было.
  • Коэффициенты. Если вы не выставили трение 0,8, а оставили значение по умолчанию, башня могла не опрокинуться, а поехать. Ответ будет про другое явление.
  • Склейка. Не скрепили блоки — падает не башня, а верхние ярусы по отдельности, и критический сдвиг получится меньше.
  • Наш расчёт. Мы считали блоки однородными, а C каждого — в геометрическом центре. Если в модели у блоков разная плотность или скруглённые углы, ребро опоры уже не там, где мы думали.

И самое честное. Движок считает больше, чем мы умеем посчитать: он знает про вращение, про удары, про то, как быстро тело поворачивается, — у нас для этого пока нет аппарата. Поэтому мы сравниваем с ним только одно число, единственное, которое умеем предсказать: сдвиг, на котором равновесие кончается. За что не отвечаем — про то и не спорим.


М2 §5.7. Задачи

Уровень 1 — узнавание

1.1. Книжный стеллаж стоит на четырёх ножках, расставленных по углам прямоугольника 40 см × 90 см (40 см — от стены к комнате). Назовите площадь опоры стеллажа. Ребёнок тянет верхнюю полку на себя, от стены. Какое ребро окажется ребром опрокидывания?

1.2. Дорожный конус — сплошной, однородный, симметричный относительно своей вертикальной оси. Где лежит его центр тяжести: на оси или в стороне от неё? Выше середины высоты или ниже? Ответ объясните, не считая: одной фразой про симметрию и одной — про то, где у конуса больше вещества.

1.3. Из картона вырезали кольцо и букву «Г». Для каждой фигуры ответьте: лежит ли её центр тяжести внутри вещества фигуры? Как проверить ответ, имея нитку, иголку, карандаш и лист бумаги?

1.4. Четыре штатива стоят на одном столе. Основание у всех одинаковое — равносторонний треугольник на трёх ножках; расстояние по горизонтали от центра основания до каждой его стороны равно 15 см. Все четыре штатива наклонены в сторону одной и той же стороны основания, так что ребром опрокидывания служит именно она. Различаются штативы высотой центра тяжести и его сдвигом от центра основания в сторону этого ребра:

штатив сдвиг C от центра, см высота C, см
А 4 30
Б 14 30
В 4 60
Г 16 20

Какой из штативов уже упал, хотя его никто не трогал? Для остальных трёх посчитайте запас устойчивости и расположите их по убыванию запаса. Влияет ли высота C на ответ, пока стол горизонтален?

1.5. Кирпич лежит на столе плашмя (грань 25 × 12 см), потом его ставят на торец (грань 12 × 6,5 см). Масса та же. Что изменилось: сила тяжести, площадь опоры, высота центра тяжести, запас устойчивости? Ответьте по каждому пункту «выросло / уменьшилось / не изменилось».


Уровень 2 — расчёт

2.1. Башня из трёх скреплённых блоков. Ширина каждого 12 см, высота 5 см. Массы снизу вверх: 0,6 кг; 0,3 кг; 0,1 кг. Центр нижнего блока — в начале координат; второй блок сдвинут вправо на 3 см относительно нижнего, третий — ещё на 3 см. а) Найдите \(x_C\) и \(y_C\) взвешенным средним. б) Укажите координаты обоих рёбер опоры и найдите \(d_{уст}\). в) Округлите ответ до десятых и объясните, почему не до сотых.

2.2. Для башни из задачи 2.1 выразите запас устойчивости в процентах от полуширины основания. Это удобная форма ответа для инженера: она не зависит от размеров конструкции. Какой запас в процентах у башни из §5.1? У какой из двух башен положение надёжнее?

2.3. Ту же башню из 2.1 собирают со ступенькой \(s\): второй блок сдвинут на \(s\), третий — на \(2s\). Выведите формулу \(x_C(s)\) и найдите критический сдвиг точно, дробью. Проверьте: подставьте \(s = 3\) см и сверьтесь с ответом 2.1.

2.4. Тележка с грузом стоит на наклонном въезде. Ширина колеи 50 см (значит от C до колеса по горизонтали 25 см), центр тяжести гружёной тележки — на высоте 40 см над дорогой, посередине между колёсами. Тележка стоит поперёк склона, колёса заторможены. а) При каком уклоне (отношение подъёма к горизонтальному пробегу) вертикаль через C выйдет за нижнее колесо? Воспользуйтесь критерием \(b/h\) из §5.2. б) Коэффициент трения покоя между шинами и покрытием \(\mu = 0{,}3\). Что случится раньше при увеличении уклона — тележка поедет или опрокинется? Ответ обоснуйте сравнением двух чисел. в) Груз переложили ниже, и C опустился до высоты 25 см. Как изменился ответ пункта (а)? Изменился ли ответ пункта (б)?

2.5. Напишите функцию stability_report(masses, xs, half_width), которая по спискам масс и координат центров блоков и по полуширине основания печатает: координату \(x_C\), запас устойчивости в сантиметрах, запас в процентах от полуширины и вердикт «стоит / на грани / падает». Запас считайте через min, как в §5.2. Проверьте функцию на башне из §5.1 (ответ должен быть 2,5 см) и на башне из задачи 2.1.


Уровень 3 — исследование

3.1. Лестница из книг. Возьмите шесть одинаковых предметов правильной формы: книги в твёрдом переплёте, домино, деревянные бруски. Сложите их стопкой на краю стола, сдвигая каждый следующий наружу, и добейтесь максимального суммарного свеса — расстояния по горизонтали от края стола до дальнего края верхнего предмета. Двигайте осторожно: стопка нескреплённая, и развалиться может любой ярус.

Измерьте максимальный свес линейкой три раза, пересобирая стопку заново, и запишите среднее.

3.2. Расчёт. Посчитайте предельный свес заранее. Подсказка к порядку рассуждения: идти надо сверху вниз и проверять каждый ярус отдельно. Верхний предмет держится, пока его C не вышел за край того, на котором он лежит. Пара верхних предметов держится, пока C этой пары не вышел за край третьего. И так далее — до нижнего, для которого опора — стол. Каждое условие даёт свой предельный сдвиг; сложите предельные сдвиги.

Оформите расчёт программой: списки масс и координат, функция центра тяжести из §5.1, цикл по ярусам. Одинаковые предметы означают, что взвешенное среднее превращается в арифметическое.

3.3. Симулятор. Соберите ту же стопку из шести тел в Algodoo — без склейки, ярусы должны падать по отдельности, — и найдите максимальный свес, при котором конструкция ещё стоит.

3.4. Отчёт. Сведите три числа в таблицу:

источник максимальный свес, см объявленная точность, см
измерение (среднее из трёх)
расчёт
симулятор

Точность объявляйте до сравнения, а не после. Затем ответьте письменно: сходятся ли три числа в пределах объявленной точности? Если нет — назовите не менее двух причин расхождения и объясните, в какую сторону каждая из них смещает результат. Кандидаты: погрешность линейки; неровность и неодинаковость предметов (у настоящей книги C не строго в центре); шаг \(\Delta t\) движка; трение, которого в расчёте нет вовсе; то, что вы двигали книги руками и слегка их подталкивали.

3.5. Если бы предметов было не шесть, а двадцать, вырос бы предельный свес? Есть ли у него предел, которого нельзя перейти, сколько книг ни бери? Проверьте расчётом на программе из 3.2, увеличив число ярусов; на симуляторе проверять не обязательно — объясните, почему двадцатиярусная стопка в модели скорее всего упадёт раньше расчётного предела.


М2 §5.8. Итог

Что теперь у вас есть.

Физика.

  • Центр тяжести C — точка, в которую можно приложить одну силу тяжести всего тела. У кольца и у буквы «Г» она лежит вне вещества, и это нормально.
  • Площадь опоры — область, ограниченная крайними точками касания; её граница называется опорным контуром. Отвечает на вопрос «где телу разрешено стоять».
  • Ребро опрокидывания — та граница контура, вокруг которой тело повернётся; рёбер несколько, работает ближайшее к вертикали через C.
  • Правило устойчивости: тело не опрокидывается, пока вертикаль через C проходит внутри площади опоры. Пока — экспериментальный факт; вывод через момент силы ждёт вас в М4 §3, когда появится момент силы.
  • Запас устойчивости \(d_{уст}\) — расстояние от вертикали через C до ближайшего ребра. Знак говорит вердикт, величина — насколько всё серьёзно.
  • Нулевая равнодействующая необходима, но недостаточна: она запрещает разгон, а не поворот. Масса в критерий не входит — устойчивость геометрическая.
  • На наклоне сравнивайте два числа: уклон против \(\mu\) — начнётся ли скольжение, уклон против \(b/h\) — начнётся ли опрокидывание. Наступает то, для чего порог ниже.

Математика.

  • Центр тяжести составной конструкции — взвешенное среднее координат её частей с массами в качестве весов; при равных массах — обычное арифметическое среднее.
  • Запись \(\min(\ldots)\) — «наименьшее из перечисленного»; в Python это встроенная функция min.
  • Векторная диаграмма с объявленным масштабным коэффициентом («1 см ⇔ 2 Н») превращает чертёж в измерительный прибор: замкнулся многоугольник — равнодействующая ноль; не замкнулся — измерьте отрезок замыкания и умножьте на масштаб.
  • Разложение силы тяжести на склоне 3 : 4 и вывод отношения \(b/h\) делаются подобием треугольников, без всякой тригонометрии.

Информатика.

  • Интерактивная модель отвечает мгновенно, но прячет внутренности; расчёт медленнее, зато весь на виду. Мы пользуемся обоими.
  • Перебор параметра загоняет ответ в вилку, деление интервала пополам сужает вилку вдвое за шаг.
  • Проверка модели — сравнение с независимым источником и объявленная заранее точность. Расхождение с симулятором — повод искать ошибку в обоих, а не верить картинке.

И общий вывод, который стоит того, чтобы его записать отдельно. Устойчивость конструкции — не про то, насколько она тяжёлая и прочная. Она про два расстояния: где стоит вертикаль через центр тяжести и где проходит ближайшее ребро. Всё остальное — способы посчитать эти два расстояния.


Мост к М3 §1

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

И как раз на размерах остался вопрос, который мы обошли. Разбирая, почему башня стоит, мы сказали: реакция опоры набирается из множества маленьких сил, распределённых по всей площадке касания. Мы заменили их одной силой и дальше не интересовались, как они по площадке разложены.

А вопрос содержательный. Одна и та же женщина в туфлях на шпильке продавливает линолеум, а в кроссовках — нет; вес тот же. Гусеничный трактор идёт по болоту, где легковая машина тонет. Кнопку вдавливают в доску пальцем, а гвоздь той же рукой не вдавишь. Во всех трёх случаях сила одна, а результат разный, и различает их площадь, по которой сила распределена.

Величина, которая измеряет силу, приходящуюся на единицу площади, называется давлением. С неё начинается следующий модуль.