Математические байки
4.29K subscribers
1.45K photos
15 videos
29 files
918 links
Рассказы про разную математику.

Архив: http://dev.mccme.ru/~merzon/mirror/mathtabletalks/
Download Telegram
Нефроида — именно её (точнее, её половину) вырисовывают лучи Солнца при отражении от стакана на его дне/на поверхности жидкости. Она же получается, как огибающая хорд, соединяющих точку на окружности под углом α с точкой под углом 3α ; у Мат. Этюдов об этом есть отличный рассказ (и отдельно модель, где можно посмотреть на огибающую, используя разное количество точек). А если вместо утроения угла взять удвоение — то огибающей будет кардиоида, и она же получается при отражении солнечных лучей от (конических) стенок кофейной чашки, когда одна из образующих конуса смотрит прямо на Солнце. (И она же — форма главной компоненты множества Мандельброта; см. ролик Mathologer-а: https://youtu.be/qhbuKbxJsk8?t=273 ).

Image credits: карточки (М. Панов), Математические Этюды.
This media is not supported in your browser
VIEW IN TELEGRAM
многим рассказывал¹, как нарисовать «ленивый додекаэдр»: взять куб и поделить каждую грань пополам регулярным образом — как раз получится 6×2=12 граней, 8+12=20 вершин (вершины куба и середины его ребер)… вся комбинаторика получается правильная

если хочется еще и правильной геометрии — нужно просто немного всё продеформировать, это и показано в видео

¹ и даже писал в «Квантике» — см. №9 за 2025 год

***

как такое нарисовать и не перетрудиться? начнем с вершин куба — это просто все точки с координатами ±1

from itertools import product
vertices = list(product([-1,1], repeat=3))

чтобы получить додекаэдр, надо добавить еще 12 вершин… не хочется их все писать руками, но тут есть большая группа симметрий G: можно переставлять координаты по циклу и расставлять знаки — и так все новые вершины можно получить из одной, (φ,0,1/φ)… и что еще приятнее, все грани можно получить из одной

v0 = (phi,0,psi)
vertices += [g(v0) for g in G()]
f0 = [(phi,0,-psi),(1,1,-1),(psi,phi,0),(1,1,1),(phi,0,psi)]
faces = [tuple(vertices.index(g(v)) for v in f0) for g in G()]
poly = Polyhedron(vertices, faces)

(результат действия элемента g на набор точек f0 — это просто tuple(g(v) for v in f0) — но в faces надо положить не координаты этих точек, а номера соответствующих вершин)

если в качестве phi и psi взять не (±1+√5)/2, а 1, то додекаэдр превратится в куб с дополнительными вершинами в серединах ребер — и такая деформация анимируется в manim примерно в одну строчку

приведу еще код для генерации группы G

def G():
for signs in product([-1,1], repeat=3):
for r in range(3):
yield lambda x: tuple(x[(i+r)%3]*signs[i] for i in range(3))

(а всё собранное целиком положу в комментарии — с использованием симметрии ~20 строк получилось… ну если с паузами и вращением камеры, то чуть больше)

***

видно, кстати, что в группе G всего 24 элемента, из которых 12 сохраняют ориентацию… а всего в группе I симметрий додекаэдра 12×5=60 вращений — получаем действие I⁺ на 60/12=5 элементах I⁺/G⁺, который дает изоморфизм I⁺≃A₅

конечно, то же можно сказать и более геометрически: G это как раз подгруппа симметрий додекаэдра, сохраняющих вписанный в него куб, а 5-элементное множество I⁺/G⁺ отождествляется с 5 вписанными в додекаэдр кубами («кубы Кеплера») — вот эти кубы I⁺ и переставляет
На обложке свежего номера «Кванта» (https://www.kvant.digital/view/kvant_2025_10/p0/ ) — фотография арки в форме перевёрнутой цепной линии в доме Каса Мила, построенном Гауди в Барселоне.

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

Давайте перевернём арку — отразив её относительно горизонтальной прямой вместе со всеми силами, которые действуют на каждый кирпичик. И потом у каждой силы изменим знак (красные стрелки на рисунке ниже). Если арка раньше была в равновесии (сумма сил, действующих на каждый кирпичик, равнялась нулю) — она останется в равновесии и сейчас, только теперь все силы напряжения действуют на растяжение вместо сжатия. И это буквально задача о том, как висит цепь — с ответом «цепная линия» (про который я когда-то тут писал, а у Мат. Этюдов о ней есть рассказ — https://etudes.ru/etudes/catenary/ ).

Но Гауди строил и собор Sagrada Familia (Святое Семейство). И изнутри здание поддерживают безумно красивые ветвящиеся колонны. А как можно рассчитать нагрузки — чтобы, опять же, каждой части каждой колонны приходилось бы держать продольную нагрузку без «ломающей» поперечной компоненты?

У Гауди была модель, своеобразный «аналоговый компьютер», построенная по той же самой логике. Это «перевёрнутая» модель собора — с грузиками, моделирующими сам поддерживаемый собор, и верёвочками, моделирующими колонны (и передачу напряжения вдоль них). Я её когда-то видел в музее при соборе вживую (и мне помнится, что тогда под ней было зеркало, переворачивающее её обратно) — а ниже фотография этой модели из Википедии.
Image credit: В. Протасов, В. Тихомиров, «Куда кривая выведет», Квант, 2025, no. 10.
Image credit:
(1) Wikimedia, photo by Rüdiger Marmulla,
(2) Wikimedia, photo by Artem Lepesin
Test_Image0.png
1.1 KB
С Новым Годом!
Маленький сюжет — два изображения. Каждое по отдельности довольно случайное — если его разрезать на квадратики 2x2, то в каждом квадрате закрашены 2 из 4 пикселей, и для каждого из изображений по отдельности это закрашивание неотличимо от случайного (как если бы в каждом квадратике 2x2 выбирали один из 6 вариантов, кидая честный кубик).
А интересно получается, если наложить эти два изображения друг на друга. Можно физически распечатать их на двух листах бумаги (лучше — с увеличением в 8 раз, но главное, с одинаковым), приложить и посмотреть на просвет. Чтобы увидеть, что «тут что-то есть», можно просто открыть их в одном просмотрщике и быстро переключаться с одного на другое и обратно, глаз заметит, что происходит. Ну а под спойлером в следующем сообщении — результат наложения.
Ну а вот — результат наложения, маленькая чёрно-белая ёлочка. Ещё раз — с Новым Годом!
https://mccme.ru/free-books/

Дед Мороз напоминает про страницу, на которой бесплатно доступны файлы множества книг (в основном издательства МЦНМО)

брошюры библиотеки «Математическое просвещение» и Летней школы «Современная математика», доклады семинара «Глобус» и материалы выездного семинара учителей, книги Арнольда и Гельфанда, Прасолова и Шеня и многое другое.

новогодние каникулы — как раз хорошая возможность спокойно почитать
5 января (по старому стилю) 1901 года родился выдающийся человек – Иван Георгиевич Петровский. Математик, уникальный ректор Московского Университета, по некоторым воспоминаниям «совершивший не менее десяти тысяч добрых дел». Пользуясь случаем, напомним некоторые материалы о нём.

Начать, наверное, стоит со статьи Владимира Михайловича Тихомирова (с добавлениями А.А. Кириллова и Э.Э. Шноля) в сборнике «Математическое просвещение» https://www.mccme.ru/free-books/matpros7.html

А вот две видеозаписи воспоминаний Владимира Андреевича Успенского
https://youtu.be/csR_APaxZuU
https://youtu.be/i3aA7uSo3Xw
(В печатном виде некоторые воспоминания В.А. Успенского вошли в статью «Ректоры МГУ» в пятую книгу «Трудов по нематематике» https://mccme.ru/free-books/uspenskii/vau_book5.pdf )

Воспоминания (аудиозапись и текст) ученицы И.Г. Петровского, впоследствии заведовавшей его кафедрой, Ольги Арсеньевны Олейник
http://oralhistory.ru/talks/orh-580
(Обратите внимание и на сам сайт «Устная история»!)

Видеозапись воспоминаний В.А. Успенского и Ю.С. Ильяшенко
https://youtu.be/Zda7IbfHVU0

Документальный фильм 1983 года «Академик И.Г. Петровский»
https://youtu.be/opF5HcgC9GI

Запись выступления Ивана Георгиевича на закрытии Международного математического конгресса 1966 года в Москве
https://youtu.be/PEBFT1bJeew

Некоторые статьи об Иване Георгиевиче можно найти на сайте mathedu.ru https://www.mathedu.ru/indexes/authors/petrovskiy_i_g/.

В 2001 году МГУ выпустило книгу
https://msupress.com/catalogue/books/book/akademik-i-g-petrovskiy-rektor-mgu/
на мат. кружках для начинающих нередко режут какие-нибудь фигуры на уголки из трех клеток

и ясно, что площадь прямоугольника, который можно разрезать, должна делиться на 3… но 3×(2n+1) разрезать нельзя, 3×(2n) разрезать легко — возникает гипотеза, что даже на 6 должно количество клеток делиться

и все же прямоугольник 5×9 на уголки разрезать можно



давно хотел научиться пользоваться SAT-солверами для задач на разрезание и тому подобных дискретных задач, а это пусть будет модельный пример

для базового введения посмотрите лучше вот например https://youtu.be/4K1MyG4ljI8 (спасибо — и не только за это видео! — Саше Куликову), но всё же кратко поясню

SAT-солвер умеет только одно: подбирать значения булевых перменных, чтобы выполнялся набор условий, где каждое условие — выбор из вариантов «такая-то переменная равна такой-то константе»¹

в pycosat условия записываются в духе [1 -3 -4] («x1 or (not x3) or (not x4)»)

в нашей задаче мы заведем по одной переменной для каждого потенциального положения уголка внутри прямоугольника:

placements = []
covers = {}
for shape in TILES:
for i, j in allcells():
cells = [(i+dx, j+dy) for dx, dy in shape]
if all(inside(*cell) for cell in cells):
pid = len(placements) + 1
placements.append(cells)
for cell in cells:
covers.setdefault(cell, []).append(pid)

все такие положения теперь лежат в массиве placements, а в словаре covers для каждой клетки указано, какие есть потенциальные способы ее покрыть

теперь пишем условия: 1) что каждая клетка покрыта; 2) что она не покрыта дважды (т.е. что из каждой пары способов покрытия хоть один не выбран):

clauses = []
for cell in allcells():
ps = covers.get(cell, [])
clauses.append(ps)
for a, b in combinations(ps, 2):
clauses.append([-a, -b])

и… всё! — можно говорить solve(clauses) и наслаждаться ответом

тут задача игрушечная, но все ж поражает, что не нужно думать ни про какую геометрию, а такой… общелогический подход про сведение чего угодно к булевой формуле отлично работает на практике… и даже код совсем недлинный получается (целиком наверное положу в комментарии)

¹ прошу прощения у логиков и сочувствующих за терминологию, но от формулировки «нормальная форма, в которой булева формула имеет вид конъюнкции дизъюнкций литералов» я теряю нить