- •Об авторе
- •О научных редакторах
- •Благодарности
- •От издательства
- •Введение
- •Для кого эта книга?
- •Почему Python?
- •План книги
- •Версия Python, платформа и IDE
- •Установка Python
- •Запуск Python
- •Использование виртуальной среды
- •Вперед!
- •Глава 1. Спасение моряков с помощью теоремы Байеса
- •Теорема Байеса
- •Проект #1. Поиск и спасение
- •Стратегия
- •Установка библиотек Python
- •Код для теоремы Байеса
- •Время сыграть
- •Итоги
- •Дополнительная литература
- •Усложняем проект. Более грамотный поиск
- •Усложняем проект. Поиск лучшей стратегии с помощью MCS
- •Усложняем проект. Вычисление вероятности обнаружения
- •Глава 2. Установление авторства с помощью стилометрии
- •Проект #2: «Собака Баскервилей», «Война миров» и «Затерянный мир»
- •Стратегия
- •Установка NLTK
- •Корпусы текстов
- •Код стилометрии
- •Итоги
- •Дополнительная литература
- •Практический проект: охота на собаку Баскервилей с помощью распределения
- •Практический проект: тепловая карта пунктуации
- •Усложняем проект: фиксирование частотности
- •Глава 3. Суммаризация текста с помощью обработки естественного языка
- •Стратегия
- •Веб-скрапинг
- •Код для «У меня есть мечта»
- •Установка gensim
- •Код для суммаризации речи «Заправляйте свою кровать»
- •Проект #5. Суммаризация речи с помощью облака слов
- •Модули Word Cloud и PIL
- •Код для создания облака слов
- •Итоги
- •Дополнительная литература
- •Усложняем проект: ночные игры
- •Усложняем проект: суммаризация суммаризаций
- •Глава 4. Отправка суперсекретных сообщений с помощью книжного шифра
- •Одноразовый блокнот
- •Шифр «Ребекка»
- •Проект #6. Цифровой ключ к «Ребекке»
- •Стратегия
- •Код для шифрования
- •Отправка сообщений
- •Итоги
- •Дополнительная литература
- •Глава 5. Поиск Плутона
- •Проект #7. Воссоздание блинк-компаратора
- •Стратегия
- •Данные
- •Код блинк-компаратора
- •Использование блинк-компаратора
- •Проект #8. Обнаружение астрономических транзиентов путем дифференцирования изображений
- •Стратегия
- •Код для детектора транзиентов
- •Использование детектора транзиентов
- •Итоги
- •Дополнительная литература
- •Практический проект: представление орбитальной траектории
- •Практический проект: найди отличия
- •Усложняем проект: сосчитаем звезды
- •Глава 6. Победа в лунной гонке с помощью «Аполлона-8»
- •Цель миссии «Аполлон-8»
- •Траектория свободного возврата
- •Задача трех тел
- •Проект #9. На Луну с «Аполлоном-8»!
- •Использование модуля turtle
- •Стратегия
- •Код программы для расчета свободного возврата «Аполлона-8»
- •Выполнение симуляции
- •Итоги
- •Дополнительная литература
- •Практический проект: симуляция шаблона поисков
- •Практический проект: запусти меня!
- •Практический проект: останови меня!
- •Усложняем проект: симуляция в истинном масштабе
- •Усложняем проект: реальный «Аполлон-8»
- •Глава 7. Выбор мест высадки на Марсе
- •Посадка на Марс
- •Карта MOLA
- •Проект #10. Выбор посадочных мест на Марсе
- •Стратегия
- •Код для выбора мест посадки
- •Результаты
- •Итоги
- •Дополнительная литература
- •Практический проект: убедимся, что рисунки становятся частью изображения
- •Практический проект: визуализация профиля высот
- •Практический проект: отображение в 3D
- •Практический проект: совмещение карт
- •Усложняем проект: три в одном
- •Усложняем проект: перенос прямоугольников
- •Глава 8. Обнаружение далеких экзопланет
- •Транзитная фотометрия
- •Проект #11. Симуляция транзита экзопланеты
- •Стратегия
- •Код для транзита
- •Эксперименты с транзитной фотометрией
- •Проект #12. Получение изображений экзопланет
- •Стратегия
- •Код для пикселизатора
- •Итоги
- •Дополнительная литература
- •Практический проект: обнаружение инопланетных мегаструктур
- •Практический проект: обнаружение транзита астероидов
- •Практический проект: добавление эффекта потемнения к краю
- •Практический проект: обнаружение пятен на звездах
- •Практический проект: обнаружение инопланетной армады
- •Практический проект: обнаружение планеты с луной
- •Практический проект: измерение продолжительности экзопланетного дня
- •Усложняем проект: генерация динамической кривой блеска
- •Глава 9. Как различить своих и чужих
- •Обнаружение лиц на фотографиях
- •Проект #13. Программирование робота-часового
- •Стратегия
- •Результаты
- •Обнаружение лиц в видеопотоке
- •Итоги
- •Дополнительная литература
- •Практический проект: размытие лиц
- •Усложняем проект: обнаружение кошачьих мордочек
- •Глава 10. Ограничение доступа по принципу распознавания лиц
- •Распознавание лиц с помощью LBPH
- •Схема распознавания лиц
- •Извлечение гистограмм локальных бинарных шаблонов
- •Проект #14. Ограничение доступа к инопланетному артефакту
- •Стратегия
- •Поддержка модулей и файлов
- •Код для захвата видео
- •Код для обучения алгоритма распознавания лиц
- •Код для прогнозирования лиц
- •Результаты
- •Итоги
- •Дополнительная литература
- •Усложняем проект: добавление пароля и видеозахвата
- •Усложняем проект: похожие лица и близнецы
- •Усложняем проект: машина времени
- •Глава 11. Создание интерактивной карты побега от зомби
- •Проект #15. Визуализация плотности населения с помощью хороплетной карты
- •Стратегия
- •Библиотека анализа данных
- •Библиотеки bokeh и holoviews
- •Установка pandas, bokeh и holoviews
- •Работа с данными по уровню безработицы и плотности населения в округах и штатах
- •Разбираем код holoviews
- •Код для отрисовки хороплетной карты
- •Планирование маршрута
- •Итоги
- •Дополнительная литература
- •Усложняем проект: отображение на карте изменения численности населения США
- •Глава 12. Находимся ли мы в компьютерной симуляции?
- •Проект #16. Жизнь, Вселенная и пруд черепахи Йертл
- •Код симуляции пруда
- •Следствия симуляции пруда
- •Измерение затрат на пересечение строк или столбцов сетки
- •Результаты
- •Стратегия
- •Итоги
- •Дополнительная литература
- •Дополнение
- •Усложняем проект: поиск безопасного места в космосе
- •Усложняем проект: а вот и Солнце
- •Усложняем проект: взгляд глазами собаки
- •Усложняем проект: кастомизированный поиск слов
- •Усложняем проект: что за сложную паутину мы плетем
- •Усложняем проект: идем вещать с горы
- •Решения для практических проектов
- •Глава 2. Определение авторства с помощью стилометрии
- •Охота на собаку Баскервилей с помощью распределения
- •Тепловая карта пунктуации
- •Глава 4. Отправка суперсекретных сообщений с помощью книжного шифра
- •Составление графика символов
- •Отправка секретов шифром времен Второй мировой войны
- •Глава 5. Поиск Плутона
- •Представление орбитальной траектории
- •Глава 6. Победа в лунной гонке с помощью «Аполлона-8»
- •Симуляция шаблона поисков
- •Заведи меня!
- •Останови меня!
- •Глава 7. Выбор мест высадки на Марсе
- •Убеждаемся, что рисунки становятся частью изображения
- •Визуализация профиля высоты
- •Отображение в 3D
- •Совмещение карт
- •Глава 8. Обнаружение далеких экзопланет
- •Обнаружение инопланетных мегаструктур
- •Обнаружение транзита астероидов
- •Добавление эффекта потемнения к краю
- •Обнаружение инопланетной армады
- •Обнаружение планеты с луной
- •Измерение продолжительности экзопланетного дня
- •Глава 9. Как различить своих и чужих
- •Размытие лиц
- •Глава 10. Ограничение доступа по принципу распознавания лиц
- •Усложняем проект: добавление пароля и видеозахвата
Проект #9. На Луну с «Аполлоном-8»! 171
для двух тел — когда этот аппарат находится в гравитационном поле Луны. Это грубое, упрощенное вычисление обеспечивает разумную оценку условий отправки и прибытия, снижая количество вариантов для начальных векторов скорости и позиции. Остается только уточнить траекторию полета с помощью повторяющихся компьютерных симуляций.
Поскольку исследователи уже нашли и задокументировали решение с сопряжением конических сечений, примененное в миссии «Аполлон-8», вычислять нам его не придется. Я адаптировал его к 2D-сценарию, который мы сейчас реализуем. Тем не менее вы вполне можете позже поэкспериментировать с альтернативными решениями, изменяя параметры R0 и V0, и повторно выполнить симуляцию.
Проект #9. На Луну с «Аполлоном-8»!
Представьте себя интерном в NASA, которого попросили создать простую симуляцию траектории свободного возврата «Аполлона-8», чтобы показать прессе и общественности. Поскольку NASA всегда ограничено в средствах, вам нужно использовать открытое ПО и завершить проект максимально быстро и дешево.
ЗАДАЧА
Написать программу на Python, которая графически симулирует траекторию свободного возврата, предложенную для миссии «Аполлон-8».
Использование модуля turtle
Для симуляции полета «Аполлона-8» нам нужно разработать способ рисовать и перемещать изображения на экране. Существует множество сторонних модулей, которые для этого сгодятся, но мы пойдем самым простым путем и используем предустановленный модуль turtle. Несмотря на то что изначально он создавался для помощи подросткам, осваивающим программирование, turtle удается легко адаптировать и для более серьезного применения.
Этот модуль позволяет использовать команды Python для перемещения небольшого указателя, называемого turtle (черепаха), по экрану. Вы можете выбрать невидимый указатель, фактическое изображение, один из предустановленных вариантов, показанных на рис. 6.4, или настроить указатель самостоятельно.
Можно задать, чтобы при движении черепаха оставляла за собой след, позволяющий контролировать ее перемещение (рис. 6.5).
172 Глава 6. Победа в лунной гонке с помощью «Аполлона-8»
С а К а а
Ч а а Т
К |
К а а |
|
а |
Рис. 6.4. Стандартные указатели, предлагаемые модулем turtle
Рис. 6.5. Перемещение черепахи в окне Turtle Graphics
Это простое рисование было реализовано с помощью следующего скрипта:
>>>import turtle
>>>steve = turtle.Turtle('turtle') # Создает объект turtle в форме черепахи
>>>steve.fd(50) # Перемещает черепаху на 50 пикселей вперед
>>>steve.left(90) # Поворачивает черепаху влево на 90 градусов
>>>steve.fd(50)
>>>steve.left(90)
>>>steve.fd(50)
Спомощью turtle можно использовать функциональность Python, что позволит писать более сжатый код. К примеру, для создания такого же шаблона можно задействовать цикл for.
>>>for i in range(3):
steve.fd(50)
steve.left(90)
Проект #9. На Луну с «Аполлоном-8»! 173
Здесь steve перемещается на 50 пикселей вперед, а затем поворачивает влево под нужным углом. Эти шаги повторяются трижды циклом for.
Другие опции позволяют изменять фигуру черепахи, ее цвет, отключать рисование пути, «отпечатывать» ее текущее положение на экране, устанавливать направление движения черепахи и получать координаты ее положения. На рис. 6.6 иллюстрируется эта функциональность, прописанная в следующем за рисунком скрипте.
Рис. 6.6. Опции настройки указателя-черепахи. Числа указывают аннотации скрипта
>>> import turtle
>>> steve = turtle.Turtle('turtle')>>> a_stamp = steve.stamp()
>>> steve.position()(0.00,0.00)
>>>steve.fd(150)
>>> steve.color('gray')
>>>a_stamp = steve.stamp()
>>>steve.left(45)
174 Глава 6. Победа в лунной гонке с помощью «Аполлона-8»
>>> steve.bk(75)
>>> a_stamp = steve.stamp()>>> steve.penup()
>>> steve.bk(75)
>>> steve.color('black')>>> steve.setheading(180)
>>> a_stamp = steve.stamp()>>> steve.pendown()
>>> steve.fd(50)
>>> steve.shape('triangle')
После импорта модуля turtle и инстанцирования объекта steve оставляем отпечаток изображения steve при помощи метода stamp() .
Далее используем метод position() для получения текущих координат черепахи (x, y) в качестве кортежа . Они пригодятся нам при вычислении расстояния между объектами для гравитационного уравнения.
Перемещаем черепаху вперед на 150 пробелов и изменяем ее цвет на серый . Затем оставляем отпечаток, поворачиваем черепаху на 45 градусов и задним ходом перемещаем на 75 пробелов, используя метод bk() .
Оставляем еще один отпечаток, после чего с помощью метода penup() отключаем рисование пройденного черепахой пути. Перемещаем steve задним ходом еще на 75 пробелов и закрашиваем его в черный. Теперь используем альтернативу rotate(), которая подразумевает движение черепахи прямо . Обратите внимание, что предустановленные в «стандартном режиме» направления движения отсчитываются от востока, а не от севера (табл. 6.1).
Таблица 6.1. Направления движения модуля turtle в стандартном режиме
Градусы |
Направление |
|
|
0 |
Восток |
|
|
90 |
Север |
|
|
180 |
Запад |
|
|
270 |
Юг |
|
|
Оставляем еще один отпечаток и вновь активируем отображение следа . Перемещаем steve на 50 пробелов вперед и изменяем фигуру указателя с черепахи на треугольник . На этом рисование завершается.
Выглядит довольно просто, но это лишь пример. Используя правильные команды, можно рисовать весьма замысловатые узоры, такие как мозаика Пенроуза, показанная на рис. 6.7.