Файл: Модель солнечной системы.docx

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 09.01.2024

Просмотров: 248

Скачиваний: 15

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Министерство образования и науки Российской Федерации федеральное государственное бюджетное образовательное учреждение высшего образования «Российский экономический университет имени Г.В. Плеханова»

Высшая школа кибернетики, математики и статистики

(факультет)

Кафедра прикладной информатики

(кафедра)

КУРСОВАЯ РАБОТА

по дисциплине «Основы объектно-ориентированное программирования»

на тему «Модель солнечной системы»

Москва - 2022 г.

Оглавление


Введение 2

Глава 1. Основные понятия. 4

1.1.Теоретические основы ООП 4

1.2.Обоснование выбора языка программирования, графической библиотеки и среды разработки 5

Глава 2. Реализация модели солнечной системы 9

2.1. Описание процесса программы 9

2.2. Краткое описание классов 10

2.3. Основные функции 11

Заключение 24

Список литературы 26


Введение


В современном мире вычислительные технологии занимают не последнее место в жизни человека. Мы живем в информационном обществе, в котором компьютеры присутствуют в нашей жизни, практически в каждой сфере нашей деятельности. Сложно представить нашу жизнь без компьютеров в медицине, строительстве, банковской сфере и многих других. Сфера распространения использования компьютера безгранична и этого нельзя отрицать. Вычислительные технологии позволяют нам моделировать различные сложные и не совсем процессы, явления, что позволяет человеку наглядно изучать те или иные области.

Целью данной работы - объектно-ориентированное программирование астрономической модели солнечной системы. В проекте будет представлена модель планет и их спутников, которые вращаются вокруг солнца и двигаются по своим орбитам с правильным соотношением скоростей.

Задачами данной работы являются:

  1. Изучить соответствующий материал, литературу, понятия, которые имеют отношение к теме;

  2. Научиться работать с графическими библиотеками;

  3. Изучить основные подходы объектно-ориентированного программирования на C++;

  4. Спроектировать модель солнечной системы на основе классов.

Актуальность выбранной темы построения солнечной системы заключается в том, что в нашей жизни мы часто лучше понимаем многие вещи и моменты, если перед нами есть наглядное представление чего-то. Так и здесь, возможно эта модель сможет кому-то помочь наглядно разобраться как в целом устроена наша вселенная, из каких планет и спутников она состоит, как примерно работает. Возможно, после этой работы, кто-то еще больше заинтересуется в изучении вселенной, в которой мы живем.


Помимо этого, данная работа важна с точки зрения практики. С помощью нее можно попрактиковать все знания и навыки, которые были получены при изучении предмета «Основы объектно-ориентированного программирования». Кроме всего этого, это возможность узнать что-то новое и получить уникальный опыт.

Глава 1. Основные понятия.

    1. Теоретические основы ООП


Как известно, программисты ранее и более 20 лет назад создавали реализовывали проекты с помощью непосредственного написания кода. Однако из-за всевозрастающей сложности проектов, стало понятно, что данный поход не совсем удачен. Поэтому были выработаны новые концепции программирования. К одной из этих концепций относится объектно-ориентированное программирование (ООП).

Объектно-ориентированное программирование:

  1. Позволяет внедрять какие-либо изменения без надобности переписывать всю программу;

  2. Способствует структурировании информации;

  3. Способствует повышению управляемости программой;

  4. Способствует лучшему пониманию кода;

  5. Благодаря такому подходу, получается более лучше и быстрее масштабировать программу под разные задачи.

Для того чтобы, код был не такой сложный, то программу разбивают на объекты. Таким образом, главным звеном в ООП можно назвать объект.

Чтобы объединять объекты, которые обладают схожими свойствами, есть классы. По сути, класс описывает свойства объекта.

Помимо всего прочего, объект обладает набором атрибутов(переменных) и методов(функций).

Центральной идеей ООП является реализация понятия "абстракция". Ее смысл заключается в том, что сущностьпроизвольной сложности можно рассматривать и производить определенные действия над ней, как над единым целым, не вдаваясь в детали внутреннего построения и функционирования. Абстракция - наличие у объекта методов и свойств, к которым мы можем обратиться в других частях программы.

Во всех объектно-ориентированных языках программирования реализованы следующие основные постулаты ООП:

1)Инкапсуляция

2)Наследование

3)Полиморфизм

Инкапсуляция – механизм, который помогает связывать вместе код и данные, которыми он манипулирует, и одновременно защищать их от произвольного доступа со стороны другого кода.

Наследование – механизм, с помощью которого один объект способен приобретать свойства другого объекта (родительского, базового класса).



Полиморфизм – механизм, который позволяет использовать один и тот же интерфейс для общего класса действий.

    1. Обоснование выбора языка программирования, графической библиотеки и среды разработки

Для реализации курсовой работы по теме, связанной с построением солнечной системы, была выбрана среда разработки Microsoft Visual Studio. Среда имеет следующие достоинства:

— обеспечение интуитивно расширяемой, понятной среды для языка, конструкторов;

— предоставление высокопроизводительных инструментальных средств для всех этапов жизненного цикла разработки -- от определения требований до последующего сопровождения продукта.

В качестве языка программирования для выполнения курсовой работы был выбран язык С++.

Данный язык программирования является высокоуровневым компилируемым языком программирования, который может подходить для реализации и создания различных приложений. Это не секрет, что сегодня это пожалуй один из самых популярных языков программирования.

Язык C++, унаследовав язык C (стандарт С90), был разработан его автором Бьерном Страуструпом с наиболее возможной реализацией теоретических концепций ООП. Вначале С++ просто служил дополнением к языку Си некоторыми возможностями ООП. Сам создатель назвал его как «Си с классами», в 1983 году переименованный в С++. Он стал полноценным языком программирования со своими особенностями и возможностями.

Основные преимущества данного языка:

1)Поддержка объектно-ориентированного программирования;

2) С++ используется практически везде;

3)Для С++ существует много компиляторов и библиотек;

4)Высокая скорость;

5) Есть возможность работы на низком уровне с адресами и памятью;

6)эффективность;

7)поддержка разных технологий и стилей программирования.

Разумеется, у С++ есть и недостатки. Например, сложности с управлением памятью, синтаксис, который зачастую провоцирует ошибки.

С++ очень быстрый и эффективный язык программирования. Данный язык будет продолжать быть популярным из-за своей производительности, эффективности. Помимо этого, этот язык программирования помогает понять лучше и глубже, как компьютеры работают и думаю. Также С++ дает возможность узнать и познакомиться с низкоуровневыми концепциями программирования.


Таким образом, исходя из всего вышесказанного в работе над своим проектом был выбран язык С++.

Свою историю OpenGL ведет с 1992 года. OpenGL — это программный интерфейс, который применяется для получения высококачественных, программно-генерируемых и интерактивных изображений.

OpenGL считается графическим стандартом в области компьютерной графики. На данный момент он является одним из самых популярных графических стандартов во всём мире.

Основной задачей OpenGL является возможность создания моделей из небольшого набора графических примитивов: точек, линий, многоугольников.

Характерные особенности OpenGL:

1) Легкость использования. Стандарт ОреnGL имеет достаточно продуманную структуру и довольно понятный интерфейс. Это позволяет с меньшими затратами создавать эффективные приложения, которые будут содержать меньше строк кода, чем если использовать другие графические библиотеки.

2) Надежность. Приложения, которые используют ОpеnGL , могут гарантировать одинаковый результат. Так будет происходить вне зависимости от типа операционной системы и организации отображения информации.

3) Переносимость. Эти приложения могут выполняться на персональных компьютерах, на рабочих станциях, суперкомпьютерах.

4) Стабильность. Дополнения и изменения в стандарте реализуются таким образом, чтобы сохранить совместимость с разработанным ранее программным обеспечением.

Функции библиотеки OpenGL можно разделить на пять основных категорий:

  1. Функции описания примитивов (точек, линий, многоугольников и так далее);

  2. Функции задания атрибутов (помогают понять, как будут выглядеть на экране отображаемые объекты);

  3. Функции описания источников света;

  4. Функции визуализации (помогают задавать положение наблюдателя и задать параметры объектива камеры);

  5. Функции геометрических преобразований (отвечает за преобразование объектов – поворот, масштабирование, перенос)

Таким образом, для работы был выбран OpenGL.

Глава 2. Реализация модели солнечной системы

2.1. Описание процесса программы


В данной курсовой работе представлено объектно-ориентированное программирование астрономической модели солнечной системы. Модель будет описывать Солнце и планеты Меркурий, Венеру, Землю, Марс, Юпитер, Сатурн, Уран, Нептун и спутники Луна, Фобос и Деймос (спутники Марса), Ио и Европа (спутники Сатурна), Тритон (Спутник Нептуна). Программа будет работать следующим образом: на экране изображается Солнце и планеты со своими спутниками. Они располагаются вокруг Солнца на своих астрономических местах. Планеты начинают вращаться вокруг Солнца по своим орбитам с правильным соотношением скоростей. В то же время спутники начинают вращаться вокруг своих планет по траекториям, складывающимся из двух вращательных движений: вращение планеты вокруг Солнца и вращение спутника вокруг планеты.


Полностью код программы можно посмотреть, перейдя по ссылке:

https://github.com/Shoronovaanastasia/term-paper-model-of-the-solar-system-.git

Результат работы в виде картинки:


2.2. Краткое описание классов


Мы вводим класс для каждой планеты и для спутников. Например для Солнца:

class Sun {

private:

float R; // Радиус

public:

Sun() {

R = 2.5;

}

float getR() const {

return R;

}

};

Введем еще класс для планеты Земля и для ее спутника. В методах мы получаем эти данные(геттер).

class Earth {

public:

float R = 1; // Радиус

float V = 15; //Время, за которое спутник делает оборот

float S = 10; // Расстояние спутника до её планеты
float getR() const {

return R;

}

float getV() const {

return V;

}

float getS() const {

return S;

}
};
class Moon {

public:

float R = 0.4; // Радиус

float V = 15; //Время, за которое спутник делает оборот

float SSun = 10; // расстояние до солнца

float S = 1.7; // Расстояние спутника до её планеты
float getR() const {

return R;

}

float getV() const {

return V;

}

float getS() const {

return S;

}

float getSSun() const {

return SSun;

}
};

Проделываем все те же действия для других планет и спутников.

2.3. Основные функции


Базовые функции, которые потребуются нам, работая с применением графической библиотеки OpenGL:

void initGL() {

glClearColor(0.0f, 0.0f, 0.0f, 1.0f); //задает значения очистки цветом, задает очистку цвета в черный цвет

}

// RGB Red Green Blue

// По умолчанию тест глубины отключен. Включим его.

void initRendering() { // Рендер. Обычно в OpenGL рендеринг используется для отрисовки в 3Д для предварительного просмотра визуализации

glEnable(GL_DEPTH_TEST); // Запуск функции из gl. А именно: Тест глубины. С помощью данной функции в целом подключается буффер глубины

}

// Теперь, с включенным тестом глубины OpenGL будет автоматически сохранять значения глубины

// для всех прошедших тест фрагментов и отбрасывать не прошедшие.

void handleResize(int w, int h) {

glViewport(0, 0, w, h); // Функция задает окно просмотра.

glMatrixMode(GL_PROJECTION); //Функция указывает, на то какая матрица является текущей матрицей.

// Применение последующих операций с матрицей к стеку матрицы проекции.
glLoadIdentity(); //Функция замены текущей матрицы матрицей идентификаторов.

gluPerspective(45.0, (double)w / (double)h, 1.0, 200.0); // Функция,которая настраивает матрицу перспективной проекции.