к каким чудовищным последствиям способен привести малейший сбой даже в однй машине на трассе со скоростью потока свыше 120 км/ч! К тому же совершенно не очевидно, на кого возлагать правовую ответственность в случае такого происшествия.
Относительно невысокая точность GPS-навигации и, в особенности, ошибки в картах не позволяют привязать к ним автопилот — необходимы средства коррекции в реальном времени на основе показаний датчиков, следящих за окружающей обстановкой. Надёжность считывания разметки и обычных дорожных знаков может в значительной степени зависеть от погодных условий — необходимы системы, гарантированно игнорирующие грязь и снег, возможно придётся изменить и графическое исполнение знаков.
Да, автопилоты существуют в авиации и на железнодорожном транспорте, в Париже поезда по одной из линий метрополитена следуют в полностью автоматическом режиме уже не первый год. Но здесь и кроется их принципиальное отличие от автомобилей: они ходят по чётко определённым маршрутам, и их движение постоянно строго контролируется целыми командами специалистов. Прелесть же автомобиля в том, что он едет, куда хочется водителю. «Забюрократизировать» их передвижение и контролировать перемещение каждой машины группой профессионалов даже теоретически невозможно.
Так что полноценный автомобильный автопилот может появиться в серийных автомобилях только тогда, когда будет гарантироваться его абсолютная надёжность, и он будет оснащён эффективными и избыточными системами для безопасной — для всех участников движения! — остановки в уникальных случаях сбоев. Пока же самое разумное решение — продолжать совершенствование временных автопилотов, отключающихся сразу после того, как водитель кладёт руки на руль.
StructureSynth: сыграйте мне про архитектуру
Ещё за школьной партой мы узнаём, что любое изображение можно представить в виде множества точек. Сегодня, право, никого не удивить уже фрактальными генераторами ландшафтов или растительности, которые автоматически «отрисовывают» фотографического уровня изображения, опираясь, по сути, на математические формулы, и не более.
Использование формальных грамматик в качестве метода описания изображений впервые появилось в конце 60-х в работах венгерского биолога Аристида Линдермайера, который исследовал микроскопические грибы и бактерии и позднее распространил этот метод и на описание макрообъектов, в частности растений и деревьев. Его метод получил название L- системы (сокращение от Lindermayer-system).
Вслед за его исследованиями последовало большое количество практических приложений и научных публикаций, часть из которых удачно совпала с бумом на фракталы, теорию хаоса и динамические системы в начале 90-х, благо генерация сложной графики стала доступна не только на специализированных мейнфреймах, а любому кодеру-энтузиасту с Amiga или PC. (Интересующимся можно посоветовать прочитать некоторые из его, весьма наглядных и интересных трудов, переводами которых занимаются, к примеру на Хабрахабре).
Основной интерес к L-системам вызван тем, что, как несложно уже догадаться, они представляют собой один из самых простых и наглядных вариантов фракталов (вместе с треугольником Серпинского и кривой Коха). Для понимания принципов подобных изображений не требуется погружаться в бездны комплексного анализа и топологии, достаточно разве что вспомнить школьную геометрию.
Методы L-систем нашли множество как художественных, так и практических применений. Например для создания высокореалистичных текстур, ландшафтов и растений, практически неотличимых на изображении от реальных.
Из числа арт- программ 2000-х одной из самых известных и канонических де-факто стал открытый проект ContextFreeArt:


Неудивительно, что после столь эффектных изображений в 2d, энтузиасты обратились к третьему измерению, благо современные мощности позволяют визуализировать сложнейшие сцены почти в реальном времени. Собственно проект Structure Synth и стал первой известной программой такого рода.
Единственный его автор — Микаель Хвидтфельд Кристенсен (Mikael Hvidtfeld Christensen) в одиночку развивает проект в течение нескольких последних лет (с 2007 г.).
Кликните по изображению чтобы перейти на галерею изображений, полученных с помощью Structure Synth.
Проект распространяется по GPL и написан на C++ под OpenGL и QT, что позволяет портировать приложение на любые платформы (кроме разве что мобильных, для которых поддержка этих фреймворков если и появилась, то совсем недавно).
В числе свежайших нововведений — поддержка javascript и встроенный рендерер, позволяющий обходиться без дополнительного экспорта в другую среду моделирования или рейтрейсинга.
Идеи, лежащие в основе формальных грамматик одновременно и очень просты и очень мощны. Объем теории по машинным языкам очень велик и изучается на многих специальностях, но в первом приближении нам понадобятся только аксиомы.
Для определения “языка” — то есть всех возможных цепочек символов — требуется задать:
1. Множество конечных символов
Множество самых базовых объектов, из которых строится структура или язык. Для естественного или машинного языка это символы, буквы, цифры, для двумерной фигуры это точки на плоскости, прямые, кривые, для трехмерной — соответственно точки в трехмерном пространстве, полигоны, векторы, поверхности.
2. Множество правил
Правило — это некая формальная запись, в которой определяется, как из одной структуры получается другая структура. Правила могут состоять из других правил.
Весьма условный пример правил для русского языка:
Для трехмерной структуры:
Понятно, что в формальной теории или реальных приложениях правила записываются более строго и могут быть очень сложными (например Perl-синтаксис регулярных выражений). Для них существует множество теорем, которыми мучают студентов старших курсов.
3. Стартовое правило
порождение структуры не может начаться просто так, мы должны объявить базовый объект или базовое правило, с которого начнется построение, исходный шаг рекурсии.
Трехмерные фигуры как грамматики описываются в текстовых файлов специального формата .es (EisenScript).
Файл состоит как из собственно правил грамматики, так и вспомогательных инструкций, переменных и макросов, предназначенных для работы в трехмерном пространстве, а также параметризации с целью дальнейшей обработки, например, конвертации в видеофайл.
Правила и трансформации оперируют с базовыми геометрическими фигурами (примитивами) в трехмерном пространстве. У фигур, помимо 3d-координат, есть только цвет (но, к сожалению, не текстура, не материал и т.п.).
Очень хочется, но нельзя в качестве базовой фигуры взять уже готовую 3d-фигуру или сцену (хотя при желании и умении это можно добавить в код, например в документации заявлены, но не реализованы несколько примитивов типа цилиндра и конуса).
Результат выполнения — трехмерная полигональная сцена с базовой моделью освещения, которая может быть экспортирована в другие форматы или сохранена как растровое изображение. Её также можно просто покрутить, увеличить или уменьшить в редакторе в окне предпросмотра, программа достаточно быстра на современных PC и начинает притормаживать на сценах от ста тысяч объектов.
Итак, посмотрим, как в Eisenscript реализованы формальные грамматики.
1. Базовые примитивы
Алфавит среды — исходные строительные блоки, из которых создается фигура. Это шар, куб, вектор,