Классы и функции
План
- Комментарии к контрольной.
- Извините, но нам придётся двигаться от абстракного к жизненному.
- Что такое функции, как их описывать.
- Оператор return
- Что такое объект, зачем он нужен. Зачем нужен класс.
- Пример: класс Planet.
- Отступление: пример, класс Vector. Что такое методы. Специальные названия методов.
- Где искать документацию по питону.
- Комментарии к заданию. (Именные репозитории. Положения планет).
Задание
Присоединитесь к репозиторию ssh://hg@kodomo.fbb.msu.ru/ваш_логин. Это пустой репозиторий, в который вы будете класть решения небольших задач по ходу первой части этого курса. После решения каждой задачи нужно делать коммиты. (Может быть осмысленно делать коммиты и чаще). Чтобы отправить ваше решение на проверку, нужно его заpushить его обратно.
Создайте в репозитории файл astro.py, опишите в нём классы Vector и Planet такими, как мы их описали на доске.
- Удостоверьтесь (в командной строке питона), что Vector работает так, как положено, и Planet работает как положено.
Допишите к модулю Planet определения "планет" sun, earth, moon1 в какой-нибудь момент времени – в какой вам удобнее
- Допишите к классу Planet метод gravity, которые получает в качестве аргумента вторую планету и возвращает вектор гравитационной силы, притягивающей данную планету ко второй.
Подсказки
Величина гравитационной силы считается по формуле:
где G – универсальная гравитационная постоянная
G = 6.6725 * 10-11 м3/(кг*с2)
Вектор гравитационной силы направлен в сторону той планеты, которая совершает гравитационное воздействие. (Т.е для планет a и b это будет вектор ab).
Внимательно следите за единицами измерения! Лучше всего, если в начале модуля вы напишете, какие единицы измерения вы используете и везде будете использовать только их. Кроме того, вам никто не мешает сделать себе константы для единиц измерения такого вида или подобного: seconds = 1; minutes = 60 * seconds; hours = 60 * minutes; ms = 1; kms = 1000 * ms и при заведении физических констант помножать их на соответствующие единицы измерения.
Данные "планет":
"планета" |
масса |
радиус |
расстояние до Земли |
5.9736*1024 кг |
6371.0 км |
0 км |
|
1.9891*1030 кг |
6.955*108м |
149597887.5 км |
|
7.3477*1022 кг |
1737.10 км |
384399 км |
Чтобы задать начальное положение планет, проще всего выбрать такой момент времени, когда они все выстраиваются вдоль одной линии. Выбрав такой момент проще всего положить координаты какой-нибудь из планет равными нулю, а все остальные планеты расположить вдоль одной из осей (X или Y).
Сложнее задать начальные скорости планет. Мы можем сделать допущение, что планеты двигаются по кругу – Земля вокруг Солнца, Луна вокруг Земли. Длина окружности – 2πR, радиус окружности нам известен. Время движения по кругу – год для Земли, лунный месяц для Луны (смотрите в википедии или вспоминайте из ваших ответов за первое занятие). Величина скорости определяется как v = L / T (где L – длина пути, T – время, потраченное на путь). Скорость – это вектор. В предположении, что центр, вокруг которого планета вращается, неподвижен, и что планета вращается по кругу, скорость направлена перпендикулярно к радиус-вектору от планеты до центра. Т.е если Земля и Солнце расположены строго вдоль оси X, то скорость направлена вдоль оси Y. Если точка, вокруг которой планета вращается, тоже движется (например, Луна вращается вокруг Земли, которая вращается вокруг Земли), то абсолютная скорость планеты есть сумма её скорости относительно центра вращения и абсолютной скорости центра вращения.
Луна вращается в ту же сторону, что и Земля (т.е. в зависимости от точки зрения, либо обе по часовой стрелке, либо обе против часовой стрелки).
В питоне принято только имена классов и некоторые из физических констант называть с заглавной буквы. Имена переменный и функций принято называть с маленькой буквы, хотя в данном случае это и противоречит традиции английского языка. (1)