КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Эксперимент
Осталось придумать алгоритм, который сгодился бы на роль «модели мира». Перебрав несколько вариантов, я остановился на алгоритме Конвея «Жизнь». Ранее о нем я почти ничего не слышал, поэтому засел за поиск – и с удивлением обнаружил на Хабре множество статей на эту тему. Осталось понять, как оценивать разницу между мирами. Мне хотелось построить решение на неком эволюционном принципе, поскольку история реального мира – это все-таки прогресс и совершенствование, а не устоявшийся режим «кипения клеток». Может быть, нечто вроде механизма генетического отбора, или чего-то подобного, что вводило бы в мир какие-то измеримые характеристики, позволяющие сравнивать разные варианты истории (например, «количество клеток 42-го уровня»). Поверх алгоритма Конвея оказалось довольно сложно что-то прикрутить. Он выбрал оптимальные параметры «Жизни», и мои попытки добавить свои правила в алгоритм делали мир неустойчивым. Спустя некоторое время я выбрал самое простое решение: использовать классический вариант алгоритма без всяких наворотов, и просто вычитать попиксельно один мир из другого (расстояние по Хэммингу) – это и будет степень расхождения истории. Сказанное я воплотил в проект: https://github.com/TimeCoder/LifeTime Там же можно скачать сбору под Windows:https://github.com/TimeCoder/LifeTime/raw/master/bin/lifetime.1.0.0.12.bin.win32.zip Видео:
1. Мир – здесь отображается процесс развития жизни, после случайного заполнения клетки образуются и распадаются по алгоритму «Жизнь» Конвея. Края мира «сшиты» между собой. 2. Хронокарта – фактически здесь мы видим хронодрево, Мультиверсум, пространство вариантов – называйте как хотите. Изначально перед нами одна прямая – первичный поток времени, нулевая реальность (зеленая). Когда мы совершим перемещение в прошлое, над основным потоком образуется тоннель (синий), а новый сценарий развития событий будет представлен кривой (желтая). 3. Блок управления, где включается машина времени и запускается перемещение. 4. Область вывода различных данных о мире, путешественнике и перемещении.
Теперь рассмотрим порядок работы с машиной времени:
1. Сразу после запуска программы вы увидите кипящий океан жизни и бегущий счетчик времени. Подождите немного, и нажимайте кнопку «Begin». 2. Машина времени активирована, мир замер в ожидании. Что по логике должно произойти далее? В машину времени должен сесть путешественник. Кликайте мышью в области мира по клеткам, выбирая тем самым объект для перемещения. Выбор можно менять, или отменять вовсе, кликая на пустую область. 3. Когда объект выбран, автоматически разблокируется слайдер, находящийся над хронокартой. Тяните его влево, отматывая историю до нужного момента времени. Это еще не перемещение: мы только выбираем точку назначения. 4. Нажимайте «Leap» — вперед, в прошлое! Объект перенесется в выбранный вами момент времени, станет частью мира, и симуляция продолжится с этой точки. По графику будет видно отклонение нового сценария истории, а в том месте, где был объект, будет легкая его подсветка. Когда время дойдет до вершины петли (точки, откуда был сделан переход в прошлое) – программа встанет на паузу, на монитор выведется ряд данных.
В данной версии есть некоторые особенности:
· Только один полет в прошлое за один сеанс работы программы. Возможность множественных бранчей в программу заложена, но пока отключена, в том числе из-за нерешенной задачи «о трех ветках», см. ниже. · Путешествий в будущее нет (не увидел в них смысла). · Переключаться между потоками можно только после петли. · После того, как вы начали двигать слайдер времени, выбрать другой объект для перемещений нельзя (нужно немного дописать код). · На больших размерах мира программа тормозит (нужно оптимизировать). · Рендер происходит с помощью OpenGL (вроде как нормальное решение).
Задача о трех ветках
Дата добавления: 2014-11-16; Просмотров: 359; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |