Pull to refresh

Comments 54

Нужна ли математика программисту?
Нужен ли программист математике?
Нужен ли программист?
UFO landed and left these words here
«Алло, Китайцы? У вас есть миллиард? Здорово! А не могли-бы вы мне его прислать?» — Лукашенко из Мульта Личности.
Ответ: Да, в частных случаях. В других частных случаях программисту нужна биохимия, экономика и куча других знаний необходимых для конкретного проекта.
Реально достали уже с этим «нужналипрограммистуматематика».
Нужен ли этот вопрос здесь?
Нет, есть гугл.
Программист — он как профессор Мориарти — по определению математик!
Очень классно, спасибо. Иллюстрации отличные.
Круто. Ещё решить бы, как добиться решаемости сгенерированного лабиринта by design.
Не «пробивать» же «дырки» в «стенах», попутно натравливая на него всякие А*.
Этому вопросу посвящен целый раздел.
Попробую объяснить на пальцах: если запускать демо с теми параметрами, что указаны в посте (M = 0.065), то белые «извилины» (стены) никогда не будут сливаться. Поскольку изначально черная область была связна (из любой черной точки можно было дойти до любой другой черной точки, передвигаясь лишь по черным точкам), то и в любой другой момент времени она останется связной. Иначе говоря, решаемости лабиринта «by design» можно добиться правильным выбором параметров модели (точнее, одного параметра M).
Спасибо за подробный ответ!
Поскольку изначально черная область была связна (из любой черной точки можно было дойти до любой другой черной точки, передвигаясь лишь по черным точкам), то и в любой другой момент времени она останется связной.

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

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

Надо поэкспериментировать и потом попробовать доказать.
Тут скорее нужно не ломать стенки, а, наоброт, закрывать лишние дырки. Например, на самой первой картинке вариантов прохода от одной стены к другой слишком много. Вот тогда будет полная жесть :)
О, извилины! Дефицит! Мне такие нужны!
Спасибо, красиво! Но что касается практичности, то главное свойство лабиринта – запутанность. В нем должен быть неочевидный правильный путь (или небольшое количество правильных путей, не считая петель и циклов), плюс большое количество тупиков или петель. А ваши лабиринты проходятся почти по прямой. Можно ли по-простому доработать алгоритм так, чтобы удлинить и запутать правильный путь?
Согласен, но, боюсь, простейшей модификацией не обойтись. Скажем, это не те лабиринты, в которых есть «правильный путь», а те лабиринты, которые можно использовать в гейм-дизайне для генерации интересных уровней.
Вы довольно точно смоделировали рост некоторых колоний бактерий, или, например, коралла-мозговика :)
UFO landed and left these words here
Никто не может гарантировать связность этого лабиринта.
Заглянул под кат с мыслью: «Что может быть необыкновенного в генерации лабиринта?», а тут такое… Снимаю шляпу, вы украли у меня часов 5 ночного сна!
*ушел генерировать лабиринты*
UFO landed and left these words here
… человек просто спит не дома. Только тссссс! Жене его не говорите!
Одна из тех очень немногих статей, ради которых я до сих пор и читаю хабр. По пальцам можно пересчитать их.
Благодарю за потрясающую иллюстрацию силы математики!
Спасибо за статью! Может быть, один лишь я не все понял, но все же: не могли бы вы пояснить, откуда берутся подобные формулы для сигмы: sigma = 1 / math.sqrt(2 * self.k) и sigma = 1 / math.sqrt(2 * self.m) и какую роль она выполняет?
В этом месте кода вычисляется свертка activity с весовой функцией
Реализовывать такую операцию руками мне не хотелось, поэтому я представил ее в виде разности результатов двух сверток: с и с . В свою очередь, свертка с функцией по сути есть свертка с функцией Гаусса (с точностью до постоянного множителя):
Отсюда и берутся значения всех таинственных констант.
А мне кажется, или подобный результат возможен вообще без сложной математики?

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

Кажется очень просто.
Зато так по идее можно гарантировать решаемость алгоритма и задавать его сложность.
Напишите алгоритм. Покажите нам. Посмотрим, сравним.
Мне, как гуманитарию, это разрывает мозг. Многое непонятно, но понятно, что это потрясающе. Не смотря на то, что по математике у меня была уверенная пятерка, сложные формулы заставили лицо скривить гримасу ужаса от шока непонимания!
Статья хорошая, но является классическим примером советского образования.

Сначала идет куча математики, которую даже я, чертов Магистр Математики, вечером за пивком решил пролистать. Хорошо, что не закрыл. Ведь дальше идет как раз интересная часть. И так везде. На протяжении шести лет университета было ровно так же. Три месяца скучнейшей абстрактной математики, которая совершенно не понятно зачем нужна. А к моменту, когда начинается реальное применение, 95% студентов уже отвалилось и ничего не понимают.

Должно быть совершенно наоборот: показать в начале классное применение, упуская объяснение сложных моментов, а уже потом постепенно разворачивать сложность и ввожить новые абстракции и формулы.
Мои 4 курса ММФ кончились 10 лет назад (хоть я все же и Магистр, но Других Наук), но я испытал удовольствие от формул, хотя вообще-то далеко не с первого раза врубился. Суть ведь не в программе, так же? А чтобы самим делать подобное. Абстракция нужна чтобы иметь не единственное применение, и этот пост тому пример. И еще и мотивация.
Вы комент-то прочитали?
Переформулирую. Мысль в том, что практическая реализация — это дело второго приоритета. Проработать идею важнее.
К сожалению многие так и остались детьми — им интересно как машинка катается, а не как она устроена что бы кататься. Им это просто скучно и хочется смотреть на катающуюся машинку. Собственно поэтому вам и рекомендуют сначала сделать привлекательную презентацию с картинками и видео для альтернативно одаренных, а потом уже пугать формулами и проработкой идеи.
Тем более что модель Коши изучают в технических ВУЗах и фактически здесь мы видим отличный пятерочный курсач второкурсника физтеха или ВМК по мат методам.
Спасибо за прекрасную статью. Вижу вы мучились с вставкой картинок с формулами. Советую стабильный онлайн сервис их генерации codecogs
Программирование великая вещь! Всего пару десятков строк кода и получается такая красотища. Мне этот метод генерации лабиринтов очень бы пригодился в одном проекте, но с python-ом я, к сожалению, не знаком. Если кто-нибудь возьмется портировать этот код на actionscript 3, то я буду не только благодарен, но и оплачу труды в размере 1000 руб. Кого это предложение интересует, пишите в личку.
Only those users with full accounts are able to leave comments. Log in, please.