Компьютерная модель. Солнечная система
Характеристики и описание Солнечной системы. Основные признаки, размер, химический состав планет Солнечной системы. Разработка программы для моделирования строения планетарной системы. Выбор языка программирования. Структура кода программы, тестирование.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 19.10.2020 |
Размер файла | 1,0 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙФЕДЕРАЦИИ
федеральное государственное бюджетное образовательное учреждение
высшего образования
«Тольяттинский государственный университет»
КУРСОВАЯ РАБОТА
Компьютерная модель. Солнечная система
Студент Хайбуллина Райса Рашидовна
Тольятти 2019
Оглавление
- Введение
- 1. Солнечная система
- 1.1 Планеты солнечной системы
- 2. Разработка программы
- 2.1 Выбор языка программирования
- 2.2 Структура кода программы
- 3. Тестирование
- Заключение
- Список литературы
- Приложение. Код программы
Введение
Солнце, луна, звезды с древних времен интересовали людей. Действительно, самым недостижимым из всего, что их окружало, был космос. Прошло время, мир изменился, но космическое пространство все по-прежнему притягивает умы и взгляды живущих на земле, заставляя их делать все новые и новые открытия.
Но каждое открытие начинается с изучения базовых знаний. Для более легкого изучения и понимая движения планет в солнечной системе во многих школах можно увидеть механическую модель солнечной системы, но у данной модель по сравнению с электронной есть ряд недостатков:
- как правило расположение планет на таких моделях хаотично, в зависимости от электронной модели;
- нет возможности настроек, к примеру скорости движения планет, моделирования расположения планет через n лет и т.д.;
- как правило механическая модель одна на образовательное учреждение, что затрудняет обучение при прохождении данной темы в нескольких классах одновременно.
В связи с этим разработка электронной модели солнечной системы будет иметь высокую актуальность для образовательных учреждений.
Цели проекта:
- познакомиться с планетами солнечной системы;
- создание модели солнечной системы.
Задачи проекта :
- изучить литературу по теме;
- сделать модель солнечной системы.
1. Солнечная система
Солнечная система - это система планет, в центре которой находится яркая звезда, источник энергии, тепла и света - Солнце. По одной из теорий Солнце образовалось вместе с Солнечной системой около 4,5 миллиардов лет назад в результате взрыва одной или нескольких сверхновых звезд. Изначально Солнечная система представляла собой облако из газа и частиц пыли, которые в движении и под воздействием своей массы образовали диск, в котором возникла новая звезда Солнце и вся наша Солнечная система.
В центра Солнечной системы находится Солнце, вокруг которого по орбитам вращаются девять крупных планет. Так как Солнце смещено от центра планетарных орбит, то за цикл оборота вокруг Солнца планеты то приближаются, то отдаляются по своим орбитам.
Различают две группы планет:
Планеты земной группы: Меркурий, Венера, Земля и Марс. Эти планеты небольшого размера с каменистой поверхностью, они находятся ближе других к Солнцу (рисунок 1).
Рисунок 1.1 - Планеты земной группы
Планеты гиганты: Юпитер, Сатурн, Уран и Нептун. Это крупные планеты, состоящие в основном из газа и им характерно наличие колец, состоящих из ледяной пыли и множества скалистых кусков (рисунок 2).
Рисунок 2.1 - Планеты гиганты
А вот Плутон не попадает ни в одну группу, т.к., несмотря на свое нахождение в Солнечной системе, слишком далеко расположен от Солнца и имеет совсем небольшой диаметр, всего 2320 км, что в два раза меньше диаметра Меркурия.
1.1 Планеты солнечной системы
Меркурий - самая маленькая планета Солнечной системы имеет радиус всего 2440 км. Период обращения вокруг Солнца, для простоты понимания приравненный к земному году, составляет 88 дней, при этом оборот вокруг собственной оси Меркурий успевает совершить всего полтора раза. Таким образом, его сутки длятся приблизительно 59 земных дней. Долгое время считалось, что эта планета все время повёрнута к Солнцу одной и той же стороной, поскольку периоды его видимости с Земли повторялись с периодичностью, примерно равной четырем Меркурианским суткам. Это заблуждение было развеяно с появлением возможности применять радиолокационные исследования и вести постоянные наблюдения с помощью космических станций. Орбита Меркурия - одна из самых нестабильных, меняется не только скорость перемещения и его удалённость от Солнца, но и само положение. Любой интересующийся может наблюдать этот эффект.
Близость к Солнцу стала причиной того, что Меркурий подвержен самым большим перепадам температуры среди планет нашей системы. Средняя дневная температура составляет около 350 градусов по Цельсию, а ночная -170 °C. В атмосфере выявлены натрий, кислород, гелий, калий, водород и аргон. Существует теория, что он был ранее спутником Венеры, но пока это остается недоказанным. Собственные спутники у него отсутствуют.
Венера - вторая от Солнца планета, атмосфера которой почти полностью состоит из углекислого газа. Её часто называют Утренней звездой и Вечерней звездой, потому что она первой из звёзд становится видна после заката, так же как и перед рассветом продолжает быть видимой и тогда, когда все остальные звёзды скрылись из поля зрения. Процент диоксида углерода составляет в атмосфере 96%, азота в ней сравнительно немного - почти 4% и в совсем незначительном количестве присутствует водяной пар и кислород.
Подобная атмосфера создает эффект парника, температура на поверхности из-за этого даже выше, чем у Меркурия и достигает 475 °C. Считается самой неторопливой, венерианские сутки длятся 243 земных дня, что почти равно году на Венере - 225 земных дней. Многие называют её сестрой Земли из-за массы и радиуса, значения которых очень близки к земным показателям. Радиус Венеры составляет 6052 км (0,85% земного). Спутников, как и у Меркурия, нет.
Земля - третья планета от Солнца и единственная в нашей системе, где на поверхности есть жидкая вода, без которой не смогла бы развиться жизнь на планете. По крайней мере, жизнь в том виде, в котором мы её знаем. Радиус Земли равен 6371 км и, в отличие от остальных небесных тел нашей системы, более 70% её поверхности покрыто водой. Остальное пространство занимают материки. Ещё одной особенностью Земли являются тектонические плиты, скрытые под мантией планеты. При этом они способны перемещаться, хоть и с очень малой скоростью, что со временем вызывает изменение ландшафта. Скорость перемещения планеты по ней - 29-30 км/сек.
Один оборот вокруг своей оси занимает почти 24 часа, причем полное прохождение по орбите длится 365 суток, что намного больше в сравнении с ближайшими планетами-соседями. Земные сутки и год также приняты как эталон, но сделано это лишь для удобства восприятия временных отрезков на остальных планетах. У Земли имеется один естественный спутник - Луна
Марс - четвёртая планета от Солнца, известная своей разрежённой атмосферой. Начиная с 1960 года, Марс активно исследуется учеными нескольких стран, включая СССР и США. Не все программы исследования были успешными, но найденная на некоторых участках вода позволяет предположить, что примитивная жизнь на Марсе существует, или существовала в прошлом.
Яркость этой планеты позволяет видеть его с Земли без всяких приборов. Причем раз в 15-17 лет, во время Противостояния, он становится самым ярким объектом на небе, затмевая собой даже Юпитер и Венеру.
Радиус почти вдвое меньше земного и составляет 3390 км, зато год значительно дольше - 687 суток. Спутников у него 2 -- Фобос и Деймос.
Юпитер - пятая по счёту от Солнца и крупнейшая планета нашей системы. Радиус её - 69912 км, она в 19 раз больше Земли и всего в 10 раз меньше Солнца. Год на Юпитере не самый долгий в солнечной системе, длится 4333 земных суток (неполных 12 лет). Его же собственные сутки имеют продолжительность около 10 земных часов. Точный состав поверхности планеты пока определить не удалось, однако известно, что криптон, аргон и ксенон имеются на Юпитере в гораздо больших количествах, чем на Солнце.
Существует мнение, что один из четырёх газовых гигантов на самом деле - несостоявшаяся звезда. В пользу этой теории говорит и самое большое количество спутников, которых у Юпитера много - целых 67. Чтобы представить себе их поведение на орбите планеты, нужна достаточно точная и чёткая модель солнечной системы. Самые крупные из них - Каллисто, Ганимед, Ио и Европа. При этом Ганимед является крупнейшим спутником планет во всей солнечной системе, радиус его составляет 2634 км, что на 8% превышает размер Меркурия, самой маленькой планеты нашей системы. Ио отличается тем, что является одним из трёх имеющих атмосферу спутников.
Сатурн - вторая по размерам планета и шестая по счёту в Солнечной системе. В сравнении с остальными планетами, наиболее схожа с Солнцем составом химических элементов. Радиус поверхности равен 57350 км, год составляет 10 759 суток (почти 30 земных лет). Сутки здесь длятся немногим дольше, чем на Юпитере - 10,5 земных часов. Количеством спутников он ненамного отстал от своего соседа - 62 против 67. Самым крупным спутником Сатурна является Титан, так же, как и Ио, отличающийся наличием атмосферы. Немного меньше него по размеру, но от этого не менее известные - Энцелад, Рея, Диона, Тефия, Япет и Мимас. Именно эти спутники являются объектами для наиболее частого наблюдения, и потому можно сказать, что они наиболее изучены в сравнении с остальными.
Долгое время кольца на Сатурне считались уникальным явлением, присущим только ему. Лишь недавно было установлено, что кольца имеются у всех газовых гигантов, но у остальных они не настолько явно видны. Их происхождение до сих пор не установлено, хотя существует несколько гипотез о том, как они появились. Кроме того, совсем недавно было обнаружено, что неким подобием колец обладает и Рея, один из спутников шестой планеты.
Уран - седьмая по счету и третья по размеру планета, радиус которой составляет 25267 км. Справедливо считается самой холодной планетой среди остальных, температура достигает -224 градусов по Цельсию. Продолжительность года -- 30 685 суток в земном исчислении (почти 84 года), сутки же ненамного меньше земных - 17 с небольшим часов. Из-за сильной наклонности оси планеты, иногда создается впечатление, будто она не вращается, как остальные небесные тела нашей системы, а катится, подобно шару. Это может наблюдать любой, кого интересует астрономия, геометрическая модель солнечной системы наглядно продемонстрирует этот эффект.
Спутников у него гораздо меньше, чем у соседнего Сатурна, всего 27. Наиболее известны Титания, Ариэль, Оберон, Умбриэль и Миранда. Они не настолько крупны, как спутники.
Примечательно, что ведя наблюдения за Ураном в свой телескоп, астроном Уильям Гершель сначала не понял, что он наблюдает за планетой, будучи уверен, что он видит комету.
Нептун - размером восьмая планета солнечной системы очень близка к своему ближайшему соседу, Урану. Радиус Нептуна равняется 24547 км. Год на планете равняется 60 190 суток (приблизительно 164 земных года). В атмосфере зафиксированы самые сильные ветра в нашей системе, скорость которых достигает 260 м/с.
По сравнению с остальными планетами-гигантами спутников у него совсем мало - всего 14. Самые известные из них - Тритон, третий в солнечной системе спутник, имеющий атмосферу, Протей и Нереида.
Примечательно, что это - единственная из планет, которая была открыта не благодаря наблюдениям, а с помощью математических расчётов.
Плутон был исключен из разряда планет в 2006 году. т.к. в поясе Койпера находятся объекты которые больше/либо равны по размерам с Плутоном. Поэтому, даже если его принимать его за полноценное небесное тело, то тогда необходимо к этой категории присоединить Эриду, у которой с Плутоном почти одинаковый размер.
2. Разработка программы
программа моделирование солнечная система
2.1 Выбор языка программирования
Язык программирования - один из способов записи алгоритмов; совокупность набора символов системы, правил образования и истолкования конструкций из символов для задания алгоритмов с использованием символов естественного языка.
Рассмотрим некоторые из них:
C++ -- чрезвычайно мощный язык, содержащий средства создания эффективных программ практически любого назначения, от низкоуровневых утилит и драйверов до сложных программных комплексов самого различного назначения.
Достоинства:
- Высокая совместимость с языком С, позволяющая использовать весь существующий С-код.
- Поддерживаются различные стили и технологии программирования, включая традиционное директивное программирование, ООП, обобщенное программирование, метапрограммирование (шаблоны, макросы).
- Имеется возможность работы на низком уровне с памятью, адресами, портами.
- Возможность создания обобщённых контейнеров и алгоритмов для разных типов данных, их специализация и вычисления на этапе компиляции, используя шаблоны.
- Кроссплатформенность. Доступны компиляторы для большого количества платформ, на языке C++ разрабатывают программы для самых различных платформ и систем.
- Эффективность. Язык спроектирован так, чтобы дать программисту максимальный контроль над всеми аспектами структуры и порядка исполнения программы.
Недостатки:
- Синтаксис, провоцирующий ошибки.
- Препроцессор, унаследованный от С, очень примитивен.
- Плохая поддержка модульности (по сути, в классическом Си модульность на уровне языка отсутствует, её обеспечение переложено на компоновщик). Подключение интерфейса внешнего модуля через препроцессорную вставку заголовочного файла (#include) серьёзно замедляет компиляцию при подключении большого количества модулей (потому что результирующий файл, который обрабатывается компилятором, оказывается очень велик).
C# нельзя рассматривать только как язык, это часть большой системы, которая включает в себя ОС Windows, среду разработки Visual Studio (и другие инструменты), ну и, конечно, саму Microsoft, которая обеспечивает поддержку этого языка. C# будет существовать и развиваться, пока существует Microsoft и пока люди пользуются Windows, а это будет ещё очень и очень долго.
Достоинства:
- легкость обучения;
- много синтаксического сахара. Синтаксический сахар - это такие конструкции, которые созданы для облегчения написания и понимания кода.
- возможность использовать его в написании как десктопных программ так и мобильных приложений, а так же сайтов.
Минусы:
- ориентированность, в основном, только на .NET (на Windows платформу);
- бесплатность только для небольших компаний и программистов одиночек.
Java-технологии имеют много особенностей, отличающие их от других технологий разработки программного обеспечения.
Достоинства:
- Переносимость. Программы, написанные на языке Java, после однократной трансляции в байт-код могут быть исполнены на любой платформе, для которой реализована виртуальная Java-машина. Наиболее эффективно возможности реального компьютера может использовать только программа, написанная с использованием «родного» машинного кода.
- Безопасность. Функционирование программы полностью определяется (и ограничивается) виртуальной Java-машиной. Отсутствуют указатели и другие механизмы для непосредственной работы с физической памятью и прочим аппаратным обеспечением компьютера. Дополнительные ограничения снижают возможность написания эффективно работающих Java-программ.
- Надежность. В языке Java отсутствуют механизмы, потенциально приводящие к ошибкам: арифметика указателей, неявное преобразование типов с потерей точности и т.п. Присутствует строгий контроль типов, обязательный контроль исключительных ситуаций. Многие логические ошибки обнаруживаются на этапе компиляции. Наличие дополнительных проверок снижает эффективность выполнения Java-программ.
Недостатки языка:
- Язык не полностью объектно-ориентирован: Язык не имеет таких свойств полностью объектно-ориентированного языка, как индивидуальные переменные, множественное наследование и.т.д.
- Соответствие корпоративным требованиям: Язык довольно популярен в мире программ с открытым кодом и технически превосходит многие коммерческие аналоги. Однако ему не хватает некоторых важных, с точки зрения корпоративной среды-особенностей. Это означает, что если мы захотим использовать PHP в корпорации, то это либо вообще не удастся сделать, либо потребуется значительно больше дополнительных программных средств, чем при использовании Java или C++.
JavaScript - это язык управления сценариями просмотра гипертекстовых страниц Web на стороне клиента. Если кратко перечислить ключевые особенности данного языка, то следует выделить следующее:
Объектно-ориентированность. Выполнение программы представляет собой взаимодействие объектов;
Приведение типов данных проводится автоматически;
Функции выступают объектами базового класса. Эта особенность делает JavaScript похожим на многие функциональные языки программирования, такие как Lisp и Haskell;
Автоматическая очистка памяти. Так называемая, сборка мусора делает JavaScript похожим на C# или Java.
Если говорить о сути применения JavaScript, то этот язык позволяет «оживлять» неподвижные страницы сайтов с помощью кода, который можно запустить на исполнение (так называемые, скрипты). То есть, можно провести аналогию с мультфильмами, где html и css- это прорисованные герои, а JavaScript - это то, что заставляет их двигаться.
Если говорить о синтаксисе JavaScript, то ему присущи следующие особенности:
Регистр важен. Функции с названиями func() и Func() - совершенно разные;
После операторов необходимо ставить точку с запятой;
Встроенные объекты и операции;
Пробелы не учитываются. Можно использовать сколько угодно отступов, а также переводов строки, чтобы оформить свой код.
Исходя из всех перечисленных особенностей языков программирования, выбор пал на язык С++.
2.2 Структура кода программы
Структура кода программы построена исходя из основных принципов ООП, что позволит с легкостью дорабатывать программный продукт внося лишь минимальные изменения в текущем коде.
Программа состоит из трех классов, каждый из которых описывает определенную часть модели солнечной системы. UML диаграмма классов представлена на рисунке 2.1.
Рисунок 2.1 - UML диаграмма классов
Класс Orbit - класс описывает орбиту.
Основные поля:
color - цвет орбиты;
x,y - координата;
width - ширина;
height - высота;
Основные функции:
paint - Рисование орбиты.
Orbit - Конструктор с параметрами.
Класс Orbit - класс описывает планету.
Основные поля:
orbitRadius - радиус орбиты;
x,y - координата;
anglePerSec - Угол наклона.
currentAngle - Угол на текущий момент времени.
width - ширина;
height - высота;
Основные функции:
paint - рисование планеты;
Planet - конструктор с параметрами;
setOrbitRadius - установка размера орбиты;
setSelfRadius - установка размера планеты;
setAnglePerSec - установка угла отображения.
Класс SolorSystemWin - класс модель солнечной системы.
Основные поля:
slot_rotate - угол вращения;
slot_scale - масштаб.
slot_shear - угол во круг оси солнца.
Основные функции:
SolorSystemWin - конструктор, в котором собственно и реализована модель солнечной системы (рисунок 2.1).
Рисунок 2.2 - Блок-схема алгоритма конструктора SolorSystemWin
3. Тестирование
При разработке программ наиболее трудоемким является этап отладки и тестирования программ.
Цель тестирования, т.е. испытания программы, заключается в выявлении имеющихся в программе ошибок.
Цель отладки состоит в выявлении и устранении причин ошибок.
Разработанное приложение в процессе отладки проверялась на валидацию кода и на наличие ограничений, накладываемых на данные.
Выбор метода тестирование зависел от функциональных требований, предъявляемых к приложению и вариантов использования приложения.
Поэтому был выбран метод модульного тестирования.
Тестирование проводилось в ручном режиме путем последовательного ввода различных наборов данных в том числе и наборы содержащие данные не соответствующих форматов, программа игнорирует не корректные данные.
Кроме того, проверялась работа приложения на разных устройствах и замечаний по его работе нет.
Отладка приложения проводилась по мере написания кода, тестирование выполнялось в ручном режиме.
При тестировании проводилась проверка:
? ввода некорректных данных
? корректности обработки данных
? правильность отображения информации.
Проверка работоспособности программы, проведена на компьютерах с операционными системами семейства Windows. Сбоев в работе программы не наблюдалось.
Ниже представлены некоторые скриншоты тестирования приложения.
Рисунок 3.1 - Пример работы программы
Рисунок 3.1 - Пример работы программы с увеличенным масштабом
Рисунок 3.1 - Пример работы программы с измененным углом обзора
Проанализировав данные тестов, можно судить о отсутствии логических ошибок в коде и о готовности программного продукта к использованию.
Заключение
В данной курсовой работе были выполнены все поставленные цели и задачи, а именно:
- Произведён ознакомление с солнечной системой.
- Реализована модель солнечной системы.
Так же был проведен анализ языков программирования.
При программировании были применены принципы модульности и ООП, что позволит дорабатывать программу без изменения текущего кода, либо с незначительными изменениями.
При дальнейшем развитии программы возможны следующие дополнения:
- Разработать 3D визуализацию.
- Добавить регулятор скорости вращения.
- Возможность сохранения в файл.
- Добавить информативные надписи.
- Добавить возможность представления солнечной системы на определенную дату.
Список литературы
1. Бланшет, Жасмин Qt 4. Программирование GUI на C++ (+ CD-ROM) / Жасмин Бланшет , Марк Саммерфилд. - М.: КУДИЦ-Пресс, 2008. - 718 c.
2. Земсков, Ю.В. Qt 4 на примерах (+ CD-ROM) / Ю.В. Земсков. - Москва: Огни, 2008. - 344 c.
3. Максим Заболоцкий. Гид в мире космоса. Режим доступа: https://spacegid.com/planetyi-nashey-s-vami-solnechnoy-sistemyi.html
Приложение
Код программы
//ORBIT.H
#ifndef ORBIT_H
#define ORBIT_H
#include <QGraphicsItem>
#include <QGraphicsEllipseItem>
#include <QColor>
#include <QRectF>
class Orbit:public QGraphicsEllipseItem//наследование
{
public://Два орбитальных метода
Orbit(QColor _color,QGraphicsItem *parent = nullptr);
Orbit(QColor _color,int _x,int _y,int _width,int _height, QGraphicsItem *parent = nullptr);
protected://холст
void paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *);
QRectF boundingRect() const;//размер
private://цвет, координаты, ширина и высота
QColor color;
int x,y;
int width;
int height;
};
#endif // ORBIT_H
//PLANET.H
#ifndef PLANET_H
#define PLANET_H
#include <QGraphicsItem>
#include <QGraphicsPixmapItem>
#include <QPixmap>
#include <QRectF>
#include <QTimerEvent>
#include <QObject>
class Planet:public QObject,public QGraphicsPixmapItem
{
public:
Planet(QGraphicsItem *parent = nullptr);
Planet(const QPixmap & pixmap,qreal _orbit,qreal _revolution,QGraphicsItem * parent = nullptr);
void setOrbitRadius(qreal value);
void setRevolution(qreal value);
void setSelfRadius(qreal value);
void setAnglePerSec();
protected:
QRectF boundingRect() const;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *);
void timerEvent(QTimerEvent *);//время
private://
qreal orbitRadius;//радиус орбиты
qreal selfRadius;//радиус планеты
qreal anglePerSec;//угол
qreal revolutionPeriod;//
qreal x{0.0},y{0.0};//координта
qreal currentAngle{0.0};//текущий угол
};
#endif // PLANET_H
//SOLORSYSTEMWIN.H
#ifndef SOLORSYSTEMWIN_H
#define SOLORSYSTEMWIN_H
#include <QMainWindow>
#include <QGraphicsScene>
//
namespace Ui {
class SolorSystemWin;
}
class SolorSystemWin : public QMainWindow
{
Q_OBJECT
public:
explicit SolorSystemWin(QWidget *parent = nullptr);//parent
~SolorSystemWin();//
protected slots://настройки
void slot_rotate(int);//угол вращения
void slot_scale(int);//размер
void slot_shear(int);//
private slots://
void on_graphicsView_rubberBandChanged(const QRect &viewportRect, const QPointF &fromScenePoint, const QPointF &toScenePoint);
private:
Ui::SolorSystemWin *ui;
QGraphicsScene *scene;//сцена
int currentAngle{0};//
int currentScaleValue{0};//
int currentShearValue{0};//Текущее направление наблюдения всей системы
};
#endif // SOLORSYSTEMWIN_H
//ORBIT.CPP
#include "Orbit.h"
#include <QPainter>
#include <QColor>
//
Orbit::Orbit(QColor _color,QGraphicsItem *parent):QGraphicsEllipseItem(parent),color(_color),x(),y(),width(),height()
{
}
Orbit::Orbit(QColor _color, int _x, int _y, int _width, int _height, QGraphicsItem *parent):Orbit(_color,parent)
{
x = _x;
y = _y;
width = _width;
height = _height;
}
QRectF Orbit::boundingRect() const
{
return QRectF(-1 - width / 2,-1 - height / 2,width,height);//размер окна
}
void Orbit::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
{
painter->setBrush(Qt::NoBrush);//цвет
painter->setPen(color);//цвет
painter->drawEllipse(boundingRect());//круг
}
//PLANET.CPP
#include "Planet.h"
#include <QPainter>
#include <qmath.h>
//?‘ў”џђ”
Planet::Planet(QGraphicsItem *parent):QGraphicsPixmapItem(parent),orbitRadius(0),selfRadius(0),anglePerSec(0),revolutionPeriod(0)
{
}
Planet::Planet(const QPixmap &pixmap, qreal _orbit,qreal _revolution,QGraphicsItem *parent):QGraphicsPixmapItem(pixmap,parent)
{
setSelfRadius(pixmap.width() >> 1);
setOrbitRadius(_orbit);
setRevolution(_revolution);
setAnglePerSec();
x = 0 - selfRadius / 2;
y = orbitRadius - selfRadius / 2;
startTimer(10);
}
QRectF Planet::boundingRect() const
{
return QRectF(-1 - selfRadius,-1 - selfRadius,2 * selfRadius,2 * selfRadius);
}
void Planet::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
{
painter->drawPixmap(boundingRect().topLeft(),pixmap());
}
void Planet::timerEvent(QTimerEvent *)
{
setPos(x,y);
currentAngle += anglePerSec;
x = orbitRadius * sin(currentAngle / 180);
y = orbitRadius * cos(currentAngle / 180);
}
void Planet::setOrbitRadius(qreal value)
{
orbitRadius = value;
}
void Planet::setSelfRadius(qreal value)
{
selfRadius = value;
}
void Planet::setRevolution(qreal value)
{
revolutionPeriod = value;
}
void Planet::setAnglePerSec()
{
anglePerSec = 360.0 / (revolutionPeriod * 360 );
}
//SOLORSYSTEMWIN.CPP
#include "SolorSystemWin.h"
#include "ui_SolorSystemWin.h"
#include "Orbit.h"
#include "Planet.h"
#include <QColor>
#include <QPalette>
#include <QPixmap>
#include <QBitmap>
#include <QDebug>
#include <QGraphicsPixmapItem>
SolorSystemWin::SolorSystemWin(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::SolorSystemWin),
scene(new QGraphicsScene())
{
ui->setupUi(this);
ui->graphicsView->setScene(scene);
ui->graphicsView->setAutoFillBackground(true);
//цвет фона
QColor backColor = QColor(Qt::black);
backColor.setAlphaF(0.7);
QPalette p = ui->graphicsView->palette();
p.setColor(ui->graphicsView->backgroundRole(),backColor);
ui->graphicsView->setPalette(p);
scene->addItem(new Orbit(QColor(Qt::yellow),0,0,80,80));
scene->addItem(new Orbit(QColor(Qt::yellow),0,0,105,105));
scene->addItem(new Orbit(QColor(Qt::yellow),0,0,145,145));
scene->addItem(new Orbit(QColor(Qt::yellow),0,0,190,190));
scene->addItem(new Orbit(QColor(Qt::yellow),0,0,240,240));
scene->addItem(new Orbit(QColor(Qt::yellow),0,0,300,300));
scene->addItem(new Orbit(QColor(Qt::yellow),0,0,450,450));
scene->addItem(new Orbit(QColor(Qt::yellow),0,0,600,600));
QGraphicsPixmapItem *sun = new QGraphicsPixmapItem(QPixmap(":/image/image/sun.png"));
scene->addItem(sun);
sun->setPos(-30,-30);
//загрузка картинок
QPixmap earthPix(":/image/image/earth.png");
QPixmap mercuryPix(":/image/image/mercury.png");
QPixmap venusPix(":/image/image/venus.png");
QPixmap marsPix(":/image/image/mars.png");
QPixmap jupiterPix(":/image/image/jupiter.png");
QPixmap saturnPix(":/image/image/saturn.png");
QPixmap uranusPix(":/image/image/uranus.png");
QPixmap neptunePix(":/image/image/neptune.png");
//создание объектов
Planet *mercury = new Planet(mercuryPix,40,0.24);
Planet *venus = new Planet(venusPix,52.5,0.62);
Planet *earth = new Planet(earthPix,72.5,1);
Planet *mars = new Planet(marsPix,95,1.9);
Planet *jupiter = new Planet(jupiterPix,120,11.8);
Planet *saturn = new Planet(saturnPix,150,29.5);
Planet *uranus = new Planet(uranusPix,225,84);
Planet *neptune = new Planet(neptunePix,300,164.8);
//добавление планеты
scene->addItem(mercury);
scene->addItem(venus);
scene->addItem(earth);
scene->addItem(mars);
scene->addItem(jupiter);
scene->addItem(saturn);
scene->addItem(uranus);
scene->addItem(neptune);
//луна
Planet *moon = new Planet(QPixmap(":/image/image/moon.png"),15,0.083,earth);
scene->addItem(moon);
connect(ui->rotateSlider,SIGNAL(valueChanged(int)),this,SLOT(slot_rotate(int)));
connect(ui->scaleSlider,SIGNAL(valueChanged(int)),this,SLOT(slot_scale(int)));
connect(ui->shearSlider,SIGNAL(valueChanged(int)),this,SLOT(slot_shear(int)));
}
SolorSystemWin::~SolorSystemWin()
{
delete ui;
}
void SolorSystemWin::slot_rotate(int angle)
{
ui->rotateLabel->setNum(angle);
ui->graphicsView->rotate(angle - currentAngle);
currentAngle = angle;
}
void SolorSystemWin::slot_scale(int value)
{
ui->scaleLabel->setNum(value);
qreal s;
if (value > currentScaleValue)
s = pow(1.05,value - currentScaleValue);
else s = pow(1/1.05,currentScaleValue - value);
ui->graphicsView->scale(s,s);
currentScaleValue = value;
}
void SolorSystemWin::slot_shear(int value)
{
ui->shearLabel->setNum(value);
ui->graphicsView->shear((value - currentShearValue) / 10.0,0);
currentShearValue = value;
}
void SolorSystemWin::on_graphicsView_rubberBandChanged(const QRect &viewportRect, const QPointF &fromScenePoint, const QPointF &toScenePoint)
{
}
Размещено на Allbest.ru
...Подобные документы
Реализация информационно-справочной системы на языке программирования C#. ее тестирование и отладка. Назначение, состав и структура программы "Адресная книга", описание операций. Программные и аппаратные требования к системе. Блок-схема и код программы.
курсовая работа [709,5 K], добавлен 11.06.2019Анализ и постановка задач дисциплины "Компьютерная графика". Разработка структуры, функциональной схемы и программной документации. Руководство программисту и оператору. Выбор и обоснование языка программирования. Описание процедур, функций, оценок.
дипломная работа [3,6 M], добавлен 16.11.2011Описание языка программирования Java: общие характеристики, главные свойства, краткий обзор. Надежность и безопасность, производительность и базовая система программы. Разработка программы поиска по словарю, алгоритм её работы. Общий вид кода программы.
курсовая работа [20,3 K], добавлен 28.10.2012Постановка задачи и математическое описание ее решения. Назначение программного обеспечения. Описание принятых идентификаторов. Выбор языка программирования и написание программы на входном языке. Методика отладки программы и проведение ее тестирования.
курсовая работа [96,1 K], добавлен 25.06.2013Обоснование выбора языка программирования. Анализ входных и выходных документов. Логическая структура базы данных. Разработка алгоритма работы программы. Написание программного кода. Тестирование программного продукта. Стоимость программного продукта.
дипломная работа [1008,9 K], добавлен 13.10.2013Характеристика используемой операционной системы, языка программирования. Структура программы на языке Turbo Pascal 7.1. Операторы языка Turbo Pascal. Проведение сортировки записей. Алгоритмы программы и подпрограмм. Причины возникновения ошибок.
курсовая работа [454,1 K], добавлен 13.06.2014Механические системы и анимационное моделирование. Некоторые задачи моделирования механических систем (на примере движение тела с переменной массой). Создание анимационно-обучающей программы механической системы, текст программы и описание ее установки.
дипломная работа [522,2 K], добавлен 30.08.2010Разработка программы с использованием языка программирования Pascal для выполнения алгебраических действий с действительными числами без знака в шестнадцатеричной системе счисления. Описание хода выполнения, схема алгоритма, листинг программы, ее функции.
реферат [687,5 K], добавлен 28.10.2011Необходимость создания моделируемой системы. Описание моделируемой системы и задание моделирования. Структурная схема модели системы. Блок–диаграмма. Текст программы. Описание текста программы. Результаты моделирования. Эксперимент, его результаты.
курсовая работа [35,9 K], добавлен 19.11.2007Особенности разработки приложений для операционной системы с помощью императивного, структурированного, объектно-ориентированного языка программирования Delphi. Формальное начало программы. Выделение конца программного блока. Листинг и описание программы.
курсовая работа [1,2 M], добавлен 04.08.2014Разработка игры "Экзамен" с применением объектно-ориентированного программирования и языка Java (в среде Eclipse Helios). Структура программы и алгоритм решения задачи. Описание методов и переменных. Экспериментальное тестирование и оценка программы.
курсовая работа [122,5 K], добавлен 19.05.2011Разработка программы, реализующей построение объемной гистограммы с использованием свойств языка программирования Java. Возможность графически отобразить статистические данные урожайности как основное требование к программе. Реализация кода программы.
курсовая работа [333,5 K], добавлен 21.01.2013Структура математической модели линейной задачи, алгоритм симплекс-метода. Разработка программы: выбор языка программирования, входные и выходные данные, пользовательский интерфейс. Описание программы по листингу, тестирование, инструкция по применению.
курсовая работа [1,2 M], добавлен 31.05.2013Разработка эскизного и технического проектов программы, ее назначение и область применения, технические характеристики. Организация входных и выходных данных, выбор состава технических и программных средств. Текст программы, ее описание и тестирование.
курсовая работа [1,3 M], добавлен 15.11.2009Проектирование программы, которая ведет учет книг в книгохранилище библиотеки. Выбор языка программирования. Разработка и элементы тестового приложения, его структура. Заполнение основных полей для добавления книги. Тестирование программы, ее алгоритм.
курсовая работа [1,5 M], добавлен 20.11.2015Основные задачи контроля и диагностики электронно-вычислительных машин, необходимость, структура диагностирования ЭВМ. Описание программы производительности системы и пакета SISOFT SANDRA. Сводная информация о тестируемом компьютере, стресс-тестирование.
курсовая работа [1,5 M], добавлен 05.05.2009Описание экспертной системы по подбору кадров. Требования к функциональным характеристикам программы. Состав и параметры технических средств ЭВМ. Структура входных данных. Руководство программиста и пользователя. Тестирование программного средства.
курсовая работа [897,0 K], добавлен 13.11.2016Концептуальная схема системы пополнения цехового склада деталей, разработка программы GPSS-модели и цифровых экспериментов. Тестирование программы, описывающей систему пополнения склада деталей, для различных параметров зерна ГСЧ и времени моделирования.
курсовая работа [521,9 K], добавлен 01.10.2012Разработка программы автоматизации подбора запчастей для ремонта автомобилей. Структурные единицы сообщений. Концептуальная модель системы. Алгоритм работы автоматизированной системы. Физическая модель данных. Описание пользовательского интерфейса.
дипломная работа [2,1 M], добавлен 20.06.2013Назначение и архитектура экспертных систем, их применение в сфере образования. Экспертные системы тестирования, принципы их функционирования. Инструментальные средства создания приложения и разработка программы тестирования. Описание программы, листинг.
дипломная работа [706,4 K], добавлен 07.05.2012