Eigendrum — веб-инструмент, который превращает произвольный контур в виртуальный барабан: покрывает форму сеткой треугольников, решает задачу на собственные значения методом конечных элементов и озвучивает получившиеся колебательные моды. Никакого сервера и бэкенда — построение сетки, решение и синтез звука происходят прямо в браузере пользователя.
Как это устроено
Мембрана барабана, закреплённая по краю, может колебаться только в определённых формах и на определённых частотах. Эти формы и частоты — решения уравнения
−∇²u = λu внутри фигуры, u = 0 на краю
Каждое решение u — это мода, стоячая волна, а каждое λ даёт частоту, пропорциональную √λ. Это задача на собственные значения, и почти для любой формы у неё нет аналитической формулы. Поэтому Eigendrum решает её численно: покрывает форму сеткой треугольников, строит матрицы жёсткости и массы методом конечных элементов и находит наименьшие собственные значения уравнения Kφ = λMφ.
Почему числам можно доверять
Для нескольких фигур спектр можно выписать точно, и решатель проверяется на них при каждом изменении кода. Частоты круга — это нули функций Бесселя; частоты прямоугольника — π²(m²/a² + n²/b²). Решатель воспроизводит оба случая с точностью лучше десятой доли процента, а поскольку согласованный метод конечных элементов минимизирует энергию на ограниченном пространстве функций, его ответы гарантированно немного завышены, но никогда не занижены. Измеренная погрешность указана в разделе с числовыми параметрами инструмента.
Точка удара имеет значение
Удар в определённую точку возбуждает каждую моду пропорционально тому, насколько сильно эта мода колеблется именно там. Если ударить по линии, где мода неподвижна, возбудить её не получится вообще. Это не заложено программистом искусственно — так получается из проекции удара молотка на моды.
Поэтому удар — это никогда не одна мода: это все моды сразу, в смеси, заданной точкой попадания молотка. Полоски напротив каждой моды в списке показывают эту смесь, а моды, отмеченные квадратом, — те, до которых молоток не смог дотянуться. Если же нажать на строку моды напрямую, зазвучит только она одна — то, чего не может сделать ни один реальный молоток, и единственный способ услышать, как на самом деле звучит одна конкретная частота формы.
Барабаны из уравнений
Помимо рисования контура вручную, форму можно задать текстом. r(t) задаёт радиус по мере того как t проходит один полный оборот, так что 1 + 0.3cos(5t) — это пятилепестковый цветок; параметрическая пара x(t), y(t) позволяет получить замкнутые кривые, недоступные для полярной записи, — например, нефроиду или яйцевидную форму. Это не просто замена рисованию мышью. Так достижимы формы, которые рука не может нарисовать точно, — например, одиннадцать одинаковых лепестков или суперэллипс, нечто среднее между кругом и квадратом, — и форма превращается в то, чем можно варьировать: меняешь одно число — слышишь, что изменилось.
Записанная уравнением форма путешествует как собственный текст. Ссылка на формулу хранит саму формулу, а не несколько сотен символов закодированного контура — её можно прочитать, переписать и отредактировать прямо в адресной строке. Слишком тонкие для честного построения сетки формы инструмент отклоняет, а не выдаёт по ним ответ, потому что тонкий срез всё равно вернул бы числа, и они были бы неверными.
Можно ли услышать форму барабана?
Именно этот вопрос в 1966 году задал математик Марк Кац. В 1992 году Кэролин Гордон, Дэвид Уэбб и Скотт Уолперт ответили нет, построив две разные фигуры с идентичными спектрами. Обе доступны в списке форм Eigendrum как барабан Каца I и II. Каждая составлена из одних и тех же семи треугольников, но по-разному расположенных. У них совпадает площадь, периметр, и совпадает каждая частота. Переключаясь между ними, легко заметить: контуры явно разные, а звук — нет.
Что является модельным допущением, а что нет
Отношения частот, формы мод и высота основного тона — это физика, полностью определяемая контуром. Чего в контуре нет — так это скорости волны, которая зависит от натяжения и плотности мембраны: ползунок высоты тона задаёт это, называя ноту, которую издавал бы круг такой же площади, а каждая форма затем поднимается над этим ориентиром на своё собственное значение. Перед решением задачи все формы масштабируются к одинаковой площади, поэтому это смещение определяется именно формой, а не размером — около шести полутонов среди встроенных фигур, при этом круг звучит ниже всех, и это следствие неравенства Фабера — Крана, а не произвольный выбор. Скорость затухания каждого обертона зависит от материала и воздуха, поэтому это остаётся ползунком, а не молчаливым допущением.
Молоток тоже смоделирован. Его ширина — это ползунок; время контакта фиксировано на уровне нескольких миллисекунд, потому что ни один реальный ударный инструмент не бьёт мгновенно, а мгновенный удар возбуждал бы все моды одинаково сильно. И ширина, и время контакта определяют, насколько сильно удар может возбудить моду, но ни один из этих параметров не может сдвинуть частоту моды. Затухание рассчитывается по модели демпфирования Рэлея, при которой потери растут пропорционально квадрату частоты: высокие обертоны затухают первыми, поэтому звук барабана темнеет по мере звучания.
Где находится сайт и как связаться с разработчиком
Eigendrum размещён на eigendrum.com. Это адрес, на который стоит ссылаться и который стоит указывать при цитировании; более старый адрес baselashraf81.github.io/eigendrum теперь является зеркалом и перенаправляет туда же.
По вопросам рекламы или партнёрства можно написать на u2679054@uel.ac.uk. Если же обнаружена ошибка в математике или интерфейсе, лучше завести issue в репозитории — тогда исправление будет публичным.
Колофон
Сборки нет, серверного бэкенда нет: построение сетки, решение и звук — всё выполняется на машине пользователя. На развёрнутом сайте используются Vercel Analytics и Google Analytics; рекламных сетей и баннера согласия на сайте нет. Поддержка домена и хостинга — добровольная, по ссылке на сайте. Форма, которую нарисовал пользователь, хранится в адресной строке после символа #, который браузеры никогда не отправляют на сервер, а аналитика настроена так, чтобы его не записывать. Подробности — в уведомлении о конфиденциальности. Набрано шрифтом Jost* от indestructible type*. В основе — работа Марка Каца Can One Hear the Shape of a Drum? (1966), статья Гордон, Уэбба и Уолперта (1992) и работа Дрисколла Eigenmodes of Isospectral Drums (1997), чьи координаты используются для обоих барабанов Каца.
Исходный код, включая решатель и тесты, проверяющие его на аналитических спектрах, доступен на github.com/BaselAshraf81/eigendrum.
Инструмент бесплатен, не требует регистрации и установки. Поддержать проект можно через ko-fi.com/baselashraf.