При генерации пещерных лабиринтов используют схожую идею:
Поле разбивается на прямоугольники иррегулярным способом. При этом существуют ограничения, которые не позволяют прямоугольникам иметь слишком разный размер и слишком разное соотношение сторон.
В некоторых общих участках делаются проходы (собственно, генерация лабиринта, только не на регулярном поле, а на иррегулярном.).
В получившиеся прямоугольники вписываются комнаты тоже случайного размера и положения.
Эти комнаты соединяются между собой через проходы коридорами.
Форма пещер модифицируется - углы сглаживаются, коридоры расширяются, стены делаются неровными. Только надо следить, чтобы при этом комнаты и коридоры не налезли друг на друга.
В классическом прямоугольном лабиринте каждая клетка может быть связана рёбрами с четырьмя окружающими. В плетёном лабиринте - с восемью (по 2 с каждой стороны) или даже с двенадцатью-шестнадцатью.
Так что, тут никаких особых заморочек нет. Но, как я уже ранее писал, при таком подходе возможны моменты, снижающие наглядность алгоритма:
Допустим по горизонтали есть подряд 4 клетки A, B, C и D. A соединена с C, а B с D. Таким образом, между B и C есть участок, полностью скрытый под другим участком. Его не будет видно, что скажется на визуальном восприятии лабиринта.
Если тупик будет заканчиваться над перпендикулярным коридором, то будет казаться, что он его разрывает. А если завести тупик под мост, то тоже будет выглядеть неаккуратно.
Можно немного модифицировать алгоритм. Например, ограничить длину моста/туннеля одним пролетом. Не включать в список кандидатов на присоединение те клетки, путь к которым ведет над поворотами/разветвлениями/тупиками (если не модифицированный, а упрощенный алгоритм Прима, то не включать рёбра, проходящие над такими клетками). Но не совсем ясно, не приведет ли это к образованию недостижимых зон.
Как я понял, WFC может использоваться для генерации тайловых карт (в т.ч. и лабиринтов с переплетениями), но при этом не гарантирует построение идеального лабиринта.
Искал на просторах Инета. По-буржуйски такие лабиринты называются "Layered Pipe Maze" (Лабиринт из слоёв труб), но толкового описания алгоритма генерации не нашел. Вернее, пока что не нашел вообще никакого.
Вот, лежу придумываю свой. В принципе, можно использовать даже алгоритм Прима, если в кандидаты на присоединение к новой комнате брать не только граничащие с присоединяемой клеткой пока не обработанные клетки, но и более дальние кандидаты (первый еще не присоединенный кандидат в нужном направлении). Но есть ограничения:
На разных уровнях должны находится только пересечения, а не коридоры, идущие в одном направлении.
Тупики не должны находится под/над другим коридором.
Иначе лабиринт станет не наглядным и трудным для восприятия.
Такие двухэтажные лабиринты с туннелями и мостами еще называют плетёными (с переплетениями). К сожалению, не нашел никаких упоминаний о методах их генераций.
Всё же интереснее не упрощенный, а модифицированный алгоритм Прима.
В модифицированном алгоритме на каждом шагу рассматриваются не стены (ребра) окаймляющие построенную часть лабиринта, а комнаты, соприкасающиеся с ней, но еще не включенные.
Краткое описание модифицированного алгоритма Прима:
Клетки (комнаты) могут находится в следующих состояниях: "raw" (еще не обработанные), "done" (присоединенные к лабиринту, "candidate" (кандидаты на присоединение) и "none" (неприсоединяемые клетки за пределами лабиринта или внутри области построения).
Вначале все клетки имеют значение "raw" или "none".
Выбираем случайную "raw"-клетку и назначаем ей значение "done" (присоединяем её к пустому лабиринту).
Все "raw"-клетки из окружения присоединенной переводим в состояние "candidate".
Если список "candidate" пуст, то лабиринт завершен (п. 9). Иначе - следующий пункт.
Cлучайным образом выбираем клетку из списка "candidate" и убираем стену между нею и "done"-клеткой из её окружения. Если таких "done"-клеток несколько, то выбираем одну из них случайным образом.
Рассмотренную "candidate" клетку присоединяем к лабиринту (назначаем ей значение "done").
Повторяем с п. 4.
Выход.
Эта модификация проще упрощенного алгоритма и, как утверждают, работает несколько быстрее за счет того, что список "candidate" можно хранить в отдельном неупорядоченном массиве. Исключение из этого массива осуществляется переписыванием последнего элемента списка на место исключаемого и уменьшением числа элементов списка на 1.
Но самое интересное, что это позволяет ввести еще и дополнительные модификации:
На шаге 6 можно выбирать "candidate" не полностью случайным образом, а отдать некоторое предпочтение последним добавленным. А из них, в свою очередь, той, которая продолжает направление пути присоединения.
Т.е. одним вероятностным параметром задается, следует ли присоединять одну из последних добавленных в "candidate" клеток, а второй параметр задаёт, взять ли самую последнюю "candidateЭ-клетку (а самой последней записывается та, которая продолжает направление движения из клетки, к которой идет присоединение).
Первый параметр влияет на протяженность коридоров, а второй - на их прямолинейность.
Ну да ... ну да-а-а ... И так же по поводу рисования на канве:
На днях как раз встречал такую мозаику. Хотел скачать красивую картинку - а фиг вам! Она даже как картинка не воспринимается. Полез в исходники страницы, а там вместо картинки несколько холстов для отдельных фрагментов. Только не 3х3, а на несколько горизонтальных полосок. Зато разной высоты.
Точка входа в процедуру DiscardVirtualMemory не найдена в библиотеке DLL C:\Program Files\UnblockPro\UnblockPro.exe.
Это на Win8.1 ... Дома у меня на Win10 и Zapret прекрасно работает. Правда, пришлось подбирать стратегии и еще подшаманить с файлом "hosts", а то по DNS еще блочат.
У моего коллеги знакомый попал под раздачу - арестовали все счета и списывали с них деньги в счет долгов по алиментам. Потому что ФССП перепутала его с таким вот полным тёзкой.
А потом еще и уволили из силовой конторы. Потому что у этого тезки была неснятая судимость. Но этот вопрос как-то фиктивно порешали. А со списанием денег ему пришлось изрядно попотеть, доказывая, что он - не он.
Хочешь получить у какого-то государства эксклюзивное право грабить производить и/или продавать свою продукцию на подведомственной ему территории - забашляй ему малую денежку, чтобы в случае нарушения этой самой эксклюзивности оно за тебя вписалось.
Если ни производить, ни продавать свой продукт на чьей-то террирории по какой-то причине не собираешься (например, из за сложности оформления призводственных лицензий), то зачем там патентовать? Пусть оно ввозит его контрабандой по серому импорту из стран, которым ты продал патент за тридорога.
В этом году тоже сдох BIOS на мамке ASUS H61M-K (тоже 2011 год). Видимо, у них время падежа пришло.
В лаборатории списали прибор, а к нему комп прилагался. Вот и попросили сделать из него нормальную пишущую машинку. Ну, мы нарастили память, поставили SSD, накатили ОС. Всё работало.
А пока отвозили в лабораторию, слетел порядок загрузки (первый звоночек). Зашли в BIOS, выставили Windows Boot Manager, сохранили ... Больше не включался.
Хорошо, что в заначке была такая-же плата. По-быстрому заменили, а та валялась полгода, пока руки до нее дошли. И то, поначалу чуть не лопухнулись - скачали BIOS от другой ревизии. А он даже размером отличается. В лоб писаться не хотело. Вернее, писалось, но записывалось не совсем то - не проходило верификацию. Помогла установка флага "Стирать перед записью".
И работает! Мы даже куда-то пристроили эту материнку.
И то и другое - закрытая территория около 8 Га, за городом на краю посёлка.
Думаю, что сильно мы никому не мешали - одна антенна смотрела в поле, а от другой до ближайших строений почти полкилометра. А до обитаемых - еще больше. И всё это через деревья. А они 5 Ггц очень сильно глушат. Как-то по весне одна ветка выросла как раз на линии антенн. Стоило листочкам распуститься - связь пропала. Скорее всего, какой-то шум пробивался слегка, но полезный сигнал по Wi-Fi почти отсутствовал.
"Дикие ягодицы" - сегодня в каждом порнокинотеатре страны!
Байка ...
Еще в 80-е годы мы шутили, что, якобы, есть в округе какая-то забегаловка под названием "Голубая вода". Или на английском - "Blue Water".
При генерации пещерных лабиринтов используют схожую идею:
Поле разбивается на прямоугольники иррегулярным способом. При этом существуют ограничения, которые не позволяют прямоугольникам иметь слишком разный размер и слишком разное соотношение сторон.
В некоторых общих участках делаются проходы (собственно, генерация лабиринта, только не на регулярном поле, а на иррегулярном.).
В получившиеся прямоугольники вписываются комнаты тоже случайного размера и положения.
Эти комнаты соединяются между собой через проходы коридорами.
Форма пещер модифицируется - углы сглаживаются, коридоры расширяются, стены делаются неровными. Только надо следить, чтобы при этом комнаты и коридоры не налезли друг на друга.
По сути, меняются даже не рёбра, а их количество.
В классическом прямоугольном лабиринте каждая клетка может быть связана рёбрами с четырьмя окружающими. В плетёном лабиринте - с восемью (по 2 с каждой стороны) или даже с двенадцатью-шестнадцатью.
Так что, тут никаких особых заморочек нет. Но, как я уже ранее писал, при таком подходе возможны моменты, снижающие наглядность алгоритма:
Допустим по горизонтали есть подряд 4 клетки A, B, C и D. A соединена с C, а B с D. Таким образом, между B и C есть участок, полностью скрытый под другим участком. Его не будет видно, что скажется на визуальном восприятии лабиринта.
Если тупик будет заканчиваться над перпендикулярным коридором, то будет казаться, что он его разрывает. А если завести тупик под мост, то тоже будет выглядеть неаккуратно.
Можно немного модифицировать алгоритм. Например, ограничить длину моста/туннеля одним пролетом. Не включать в список кандидатов на присоединение те клетки, путь к которым ведет над поворотами/разветвлениями/тупиками (если не модифицированный, а упрощенный алгоритм Прима, то не включать рёбра, проходящие над такими клетками). Но не совсем ясно, не приведет ли это к образованию недостижимых зон.
Как я понял, WFC может использоваться для генерации тайловых карт (в т.ч. и лабиринтов с переплетениями), но при этом не гарантирует построение идеального лабиринта.
Искал на просторах Инета. По-буржуйски такие лабиринты называются "Layered Pipe Maze" (Лабиринт из слоёв труб), но толкового описания алгоритма генерации не нашел. Вернее, пока что не нашел вообще никакого.
Вот, лежу придумываю свой. В принципе, можно использовать даже алгоритм Прима, если в кандидаты на присоединение к новой комнате брать не только граничащие с присоединяемой клеткой пока не обработанные клетки, но и более дальние кандидаты (первый еще не присоединенный кандидат в нужном направлении). Но есть ограничения:
На разных уровнях должны находится только пересечения, а не коридоры, идущие в одном направлении.
Тупики не должны находится под/над другим коридором.
Иначе лабиринт станет не наглядным и трудным для восприятия.
QR-код с высоким уровнем коррекции ошибок (Level H) позволяет скорректировать до 30% ошибочных блоков.
Такие двухэтажные лабиринты с туннелями и мостами еще называют плетёными (с переплетениями). К сожалению, не нашел никаких упоминаний о методах их генераций.
Всё же интереснее не упрощенный, а модифицированный алгоритм Прима.
В модифицированном алгоритме на каждом шагу рассматриваются не стены (ребра) окаймляющие построенную часть лабиринта, а комнаты, соприкасающиеся с ней, но еще не включенные.
Краткое описание модифицированного алгоритма Прима:
Клетки (комнаты) могут находится в следующих состояниях: "raw" (еще не обработанные), "done" (присоединенные к лабиринту, "candidate" (кандидаты на присоединение) и "none" (неприсоединяемые клетки за пределами лабиринта или внутри области построения).
Вначале все клетки имеют значение "raw" или "none".
Выбираем случайную "raw"-клетку и назначаем ей значение "done" (присоединяем её к пустому лабиринту).
Все "raw"-клетки из окружения присоединенной переводим в состояние "candidate".
Если список "candidate" пуст, то лабиринт завершен (п. 9). Иначе - следующий пункт.
Cлучайным образом выбираем клетку из списка "candidate" и убираем стену между нею и "done"-клеткой из её окружения. Если таких "done"-клеток несколько, то выбираем одну из них случайным образом.
Рассмотренную "candidate" клетку присоединяем к лабиринту (назначаем ей значение "done").
Повторяем с п. 4.
Выход.
Эта модификация проще упрощенного алгоритма и, как утверждают, работает несколько быстрее за счет того, что список "candidate" можно хранить в отдельном неупорядоченном массиве. Исключение из этого массива осуществляется переписыванием последнего элемента списка на место исключаемого и уменьшением числа элементов списка на 1.
Но самое интересное, что это позволяет ввести еще и дополнительные модификации:
На шаге 6 можно выбирать "candidate" не полностью случайным образом, а отдать некоторое предпочтение последним добавленным. А из них, в свою очередь, той, которая продолжает направление пути присоединения.
Т.е. одним вероятностным параметром задается, следует ли присоединять одну из последних добавленных в "candidate" клеток, а второй параметр задаёт, взять ли самую последнюю "candidateЭ-клетку (а самой последней записывается та, которая продолжает направление движения из клетки, к которой идет присоединение).
Первый параметр влияет на протяженность коридоров, а второй - на их прямолинейность.
Ну да ... ну да-а-а ... И так же по поводу рисования на канве:
На днях как раз встречал такую мозаику. Хотел скачать красивую картинку - а фиг вам! Она даже как картинка не воспринимается. Полез в исходники страницы, а там вместо картинки несколько холстов для отдельных фрагментов. Только не 3х3, а на несколько горизонтальных полосок. Зато разной высоты.
Это на Win8.1 ... Дома у меня на Win10 и Zapret прекрасно работает. Правда, пришлось подбирать стратегии и еще подшаманить с файлом "hosts", а то по DNS еще блочат.
А он ответит, что не имел понятия, с какой целью его изымают, т.к. ордер предъявлен не был.
А ... А ... А как же хоум-видео? Т.е. офис-видео? Неужели не было?
А на "ша"?
Анаша - это "пять", это "пять"!
(Из старого анекдота)
Если бы только просто встречались ...
У моего коллеги знакомый попал под раздачу - арестовали все счета и списывали с них деньги в счет долгов по алиментам. Потому что ФССП перепутала его с таким вот полным тёзкой.
А потом еще и уволили из силовой конторы. Потому что у этого тезки была неснятая судимость. Но этот вопрос как-то фиктивно порешали. А со списанием денег ему пришлось изрядно попотеть, доказывая, что он - не он.
Уверен, что в этой базе вполне могут оказаться данные на человека с моими ФИО и датой рождения.
А что не так?
Хочешь получить у какого-то государства эксклюзивное право
грабитьпроизводить и/или продавать свою продукцию на подведомственной ему территории - забашляй ему малую денежку, чтобы в случае нарушения этой самой эксклюзивности оно за тебя вписалось.Если ни производить, ни продавать свой продукт на чьей-то террирории по какой-то причине не собираешься (например, из за сложности оформления призводственных лицензий), то зачем там патентовать? Пусть оно ввозит его
контрабандойпо серому импорту из стран, которым ты продал патент за тридорога.Всё самоурегулировано.
В этом году тоже сдох BIOS на мамке ASUS H61M-K (тоже 2011 год). Видимо, у них время падежа пришло.
В лаборатории списали прибор, а к нему комп прилагался. Вот и попросили сделать из него нормальную пишущую машинку. Ну, мы нарастили память, поставили SSD, накатили ОС. Всё работало.
А пока отвозили в лабораторию, слетел порядок загрузки (первый звоночек). Зашли в BIOS, выставили Windows Boot Manager, сохранили ... Больше не включался.
Хорошо, что в заначке была такая-же плата. По-быстрому заменили, а та валялась полгода, пока руки до нее дошли. И то, поначалу чуть не лопухнулись - скачали BIOS от другой ревизии. А он даже размером отличается. В лоб писаться не хотело. Вернее, писалось, но записывалось не совсем то - не проходило верификацию. Помогла установка флага "Стирать перед записью".
И работает! Мы даже куда-то пристроили эту материнку.
И то и другое - закрытая территория около 8 Га, за городом на краю посёлка.
Думаю, что сильно мы никому не мешали - одна антенна смотрела в поле, а от другой до ближайших строений почти полкилометра. А до обитаемых - еще больше. И всё это через деревья. А они 5 Ггц очень сильно глушат. Как-то по весне одна ветка выросла как раз на линии антенн. Стоило листочкам распуститься - связь пропала. Скорее всего, какой-то шум пробивался слегка, но полезный сигнал по Wi-Fi почти отсутствовал.
И это из-за одной ветки на расстоянии 300 м.
Как-как ... Ногу у туалатина одну откусить :)
Только это для замены Коппермайна. А в этой теме, похоже, проц - Мендочино, более древний. Можно ли его на Туалатин заменить - не знаю.
У нас был. Валялся на складе долго. Потом связист его выпросил. Уж не знаю, зачем ему он мог понадобиться.