Фізична модель Сонячної системи

Ознайомлення з модулями, за допомогою яких реалізується робота розробленого програмного забезпечення. Дослідження та характеристика основних методів класу main window. Розгляд опису та особливостей інтерфейсу користувача моделі Сонячної системи.

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык украинский
Дата добавления 10.07.2017
Размер файла 192,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Міністерство освіти і науки України

Чернівецький національний університет імені Юрія Федьковича

Програмного забезпечення комп`ютерних систем

Контрольна робота з об'єктно-орієнтованого програмування

На тему: «Фізична модель Сонячної системи»

Виконав: студент (ка) 1 курсу, групи 143

спеціальності 6.121 Інженерія програмного забезпечення

Циганович О. В.

Керівник: Миронів І. В.

Нороконтролер Комісарчук В. В.

Чернівці-2017

Реферат

У проекті розроблено програму для моделювання фізичної динаміки Сонячної системи. Програма призначена для персональних комп`ютерів.

Базис програми розрахований на новачка: доступ у користувача є до обмеженої кількості функцій, що робить розробку простою у сприйнятті.

Область застосування - програмне забезпечення для персональних комп'ютерів.

Програма реалізована на мові С++, у середовищі Qt 4.8.

Дана розробка у майбутньому може бути розширена із добавленням нового функціоналу і видозміненою логікою обробки.

Операційна система, фізична модель, персональні комп'ютери, QT 4.8, С++.

Специфікація проекту

Загальні вимоги до програми

Вимоги до інтерфейсу користувача:

1. Робоча мова - українська, додаткова - англійська.

2. Вибір режиму швидкості шляхом регулювання.

3. Вибір режиму роботи таймера.

Вимоги до функціональності додатка:

1. Початок програми із заздалегідь заданим функцоналом, постійним для кожного запуску.

2. Створення функції руху, обмуволення її для різних типів тіл.

3. Наявність конкретно визначених об`єктів, пов`язаних конкретно визначеними функціями.

Призначення та область застосування

Мета проекту - розроблення функціональної моделі Сонячної Системи для ОС Windows.

Призначення полягає у інтерактивному моделюванні фізичних процесів для кращого їх сприйняття, розважанні користувача тощо.

Область застосування - комп`ютери під ОС Windows, версії XP та пізніших.

Функціональні вимоги

1. Програмне забезпечення мусить забезпечувати роботу користувача у всіх доступних режимах, описаних вище.

Опис структури програми (модулі програми)

Робота розробленого програмного забезпечення реалізується наступними модулями:

• Main - основний клас проекту;

• MainWindow - клас, в якому реалізовано створення інтерфейсу програми;

• Body - клас, у якому реалізовано опис небесних тіл;

1. Алгоритми роботи програми

Рис. 1 - Узагальнена схема роботи програми

Рис.2 - Деталізована схема роботи програми

2. Опис методів програми

Таблиця 1 - Основні методи класу MainWindow

Метод

Короткий опис

1

paintEvent()

Створює графічний інтерфейс з усіма похідними

2

timerStop()

Зупиняє/продовжує роботу таймера.

3

physics()

Змінює координати тіл залежно від швидкості

4

forcePlus()

Збільшує значення кількості ітерацій за секунду(прискорення сцени)

5

forceMinus()

Зменшує значення кількості ітерацій за секунду(сповільнення сцени)

Таблиця 2 - Основні методи класу TBody

Метод

Короткий опис

1

calculateSpeed()

Підраховує швидкість небесного тіла під час кожної ітерації.

3. Програмні засоби

Програма була розроблена на мові С++, що забезпечує її швидкодійність на низьку ресурсозатратність.

Як низькорівнева мова, С++ забезпечує прямий доступ до жорсткого диску і знімає багато обмежень, що робить її використання більш гнучким та ефективним.

Cередовищe Qt 4.8, засобами якого булла реалізована програма, є багатофункціональним, а тому - зручним.

Опис інтерфейсу користувача

До складових частин користувацького інтерфейсу, окрім графічного вікна, входять спеціальні функції, реалізовані методом сигналів та слотів.

На момент запуску програми перед користувачем три клавіші: «+», «-» та «Stop». програмний інтерфейс сонячний

Перші дві відповідають за регулювання швидкості, остання - таймера.

Рис. 3 - Головне вікно програми

Наряду з функціональнами елементами у інтерфейсі присутні і інформативні.

Це строки у лівому верхньому на нижньому кутках. У першій міститься число кадрів на секунду, що дозволяє оцінити швидкодію програми, а другій - стан швидкості для регуляції.

Висновки

Працюючи над даним проектом я поглибив власні знання у області техніки та логіки написання коду, отримав досвід роботи у середовищі Qt. Досягнення позитивного результату стало можливим завдяки освоєнню основ алгоритмізації і роботи з ПЗ загалом.

Інтегруючи різноаспектні знання, я вирішив поставлену переді мною задачу - побудувати модель Сонячної системи.

Завдяки роботі над програмою я освоїв нові методи, ідеї та принципи роботи з алгоритмами.

Список використаних джерел

1. Страуструп Б. Язык программирования С++[Текст] / В. А. Липатьев. - М. : ИНФРА-М, 2007. - 369 с.

2. https://wiki.qt.io/How_to_create_a_library_with_Qt_and_use_it_in_an_application/ru

3. http://doc.qt.io/qt-4.8/timers.html

4. https://forum.qt.io/topic/23441/solved-adding-image-to-a-layout

Додаток

// Body.h

#ifndef BODY_H

#define BODY_H

#include<QPointF>

#include<QVector>

class Body

{

public:

Body(float size, float mass, short type, QPointF position, QPointF speed, bool physics, Body *parent = NULL);

float size;

float mass;

short type;

QPointF position;

QPointF speed;

bool physics;

Body *parent;

QVector<QPointF> trace;

void calculateSpeed(QList<Body *> bodies, float gConstant, float deltaTime);

};

#endif // BODY_H

// Body.cpp

#include "body.h"

#include <QDebug>

Body::Body(float size, float mass, short type, QPointF position, QPointF speed, bool physics, Body *parent) {

this->size = size;

this->mass = mass;

this->type = type;

this->position = position;

this->speed = speed;

this->physics = physics;

this->parent = parent;

}

void Body::calculateSpeed(QList<Body *> bodies, float gConstant, float deltaTime) {

QPointF forceVector;

if (this->parent == NULL) {

for (int j = 0; j < bodies.count(); j++) {

Body *secondBody = bodies[j];

if (secondBody != this && secondBody->parent == NULL) {

float dist = sqrt(pow(this->position.x() - secondBody->position.x(), 2) + pow(this->position.y() - secondBody->position.y(), 2));

float force = gConstant * secondBody->mass * this->mass / pow(dist * 1000000000, 2);

force /= this->mass;

float angle = atan2(this->position.y() - secondBody->position.y(), this->position.x() - secondBody->position.x());

forceVector -= QPointF(cos(angle) * force, sin(angle) * force);

}

}

} else {

if (parent->physics) {

this->position += parent->speed;

}

float dist = sqrt(pow(this->position.x() - parent->position.x(), 2) + pow(this->position.y() - parent->position.y(), 2));

float force = gConstant * parent->mass * this->mass / pow(dist * 1000000000, 2);

force /= this->mass;

float angle = atan2(this->position.y() - parent->position.y(), this->position.x() - parent->position.x());

forceVector -= QPointF(cos(angle) * force, sin(angle) * force);

}

this->speed += forceVector / deltaTime;

}

// MainWindow.h

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include <QMainWindow>

#include "body.h"

#include <QPushButton>

#include <QWidget>

#include "newwindow.h"

namespace Ui {

class MainWindow;

}

class MainWindow : public QMainWindow

{

Q_OBJECT

public:

explicit MainWindow(QWidget *parent = 0);

~MainWindow();

protected:

void paintEvent(QPaintEvent *) override;

private:

Ui::MainWindow *ui;

QList<Body *> bodies;

private slots:

void physics();

void timerStop();

void forcePlus();

void forceMinus();

};

#endif // MAINWINDOW_H

// MainWindow.cpp

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include <QPainter>

#include <QTimer>

#include <QDebug>

#include <QTime>

// Константні масси

const float sunMass = 1.989 * pow(10, 30);

const float earthMass = 2.122 * pow(10, 30);

const float moonMass = 7.34 * pow(10, 22);

const float marsMass = 1.877 * pow(10, 30);

const float phobosMass = 1.072 * pow(10, 16);

const float deimosMass = 1.48 * pow(10, 15);

const float venusMass = 4.867 * pow(10, 24);

const float mercuryMass = 3.285 * pow(10, 23);

// Гравітація

const float gConstant = 6.67408 * pow(10, -11);

float forceMod = 1;

bool a = false;

int times = 0;

int brand = 1/forceMod;

// Циклічні змінні

QTimer *timer = new QTimer();

unsigned short frameDelay = 15;

// ФПС

QTime t;

float deltaTime = frameDelay;

// Зображення

QList<QImage> pictures;

void MainWindow::paintEvent(QPaintEvent *) {

QPainter p;

p.begin(this);

p.fillRect(QRect(0, 0, ui->centralWidget->width(), ui->centralWidget->height()), Qt::black);

for (int i = 0; i < bodies.count(); i++) {

for (int j = 0; j < bodies[i]->trace.count() - 1; j++) {

p.setPen(QColor(j,j,j));

p.drawLine(bodies[i]->trace[j], bodies[i]->trace[j + 1]);

}

}

for (int i = 0; i < bodies.count(); i++) {

Body *currentBody = bodies[i];

QImage temp = pictures[currentBody->type].scaled(QSize(pictures[currentBody->type].width()*currentBody->size, pictures[currentBody->type].height()*currentBody->size));

p.drawImage(QPoint(currentBody->position.x() - temp.width() / 2,

currentBody->position.y() - temp.height() / 2), temp);

}

p.setPen(Qt::gray);

p.drawText(QPoint(0, 10), QString(QString::number(int(1000 / deltaTime))+" fps"));

p.drawText(QPoint(0, ui->centralWidget->height() - 1), QString(QString::number(forceMod)+"x"));

p.end();

}

void MainWindow::physics() {

if (forceMod<1) {

if (times%brand==0) {

times = 0;

for (int i = 0; i < bodies.count(); i++) {

if (bodies[i]->physics) {

bodies[i]->calculateSpeed(bodies, gConstant, deltaTime);

}

}

for (int i = 0; i < bodies.count(); i++) {

bodies[i]->trace.append(bodies[i]->position);

if (bodies[i]->trace.count() > 255) {

bodies[i]->trace.removeFirst();

}

if (bodies[i]->physics) {

bodies[i]->position += bodies[i]->speed;

}

}

}

times++;

deltaTime = t.elapsed();

t.restart();

}

else {

for (int i = 0; i < forceMod; i++) {

for (int i = 0; i < bodies.count(); i++) {

if (bodies[i]->physics) {

bodies[i]->calculateSpeed(bodies, gConstant, deltaTime);

}

}

for (int i = 0; i < bodies.count(); i++) {

bodies[i]->trace.append(bodies[i]->position);

if (bodies[i]->trace.count() > 255) {

bodies[i]->trace.removeFirst();

}

if (bodies[i]->physics) {

bodies[i]->position += bodies[i]->speed;

}

}

deltaTime = t.elapsed();

}

t.restart();

}

update();

}

void MainWindow::timerStop () {

if(a)

{

a = false;

timer->start();

ui->pushButton->setText("Stop");

}

else

{

a = true;

timer->stop();

ui->pushButton->setText("Start");

}

}

void MainWindow::forcePlus () {

if (forceMod>=0.9) {

forceMod++;

}

else

{

forceMod *= 10;

brand = 1/forceMod;

}

times = 0;

}

void MainWindow::forceMinus () {

times = 0;

if (forceMod>1) {

forceMod--;

}

else

{

forceMod /= 10;

brand = 1/forceMod;

}

}

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {

ui->setupUi(this);

connect(ui->pushButton, SIGNAL (released()), this, SLOT (timerStop()));

connect(ui->pushButton_2, SIGNAL (released()), this, SLOT (forceMinus()));

connect(ui->pushButton_3, SIGNAL (released()), this, SLOT (forcePlus()));

pictures.append(QImage(":/type0.png"));

pictures.append(QImage(":/type1.png"));

pictures.append(QImage(":/type2.png"));

pictures.append(QImage(":/type3.png"));

pictures.append(QImage(":/type4.png"));

pictures.append(QImage(":/type5.png"));

pictures.append(QImage(":/type6.png"));

pictures.append(QImage(":/type7.png"));

Body *newBody = new Body(3, sunMass, 0, QPointF(450, 300), QPointF(0, 0), false);

bodies.append(newBody);

newBody = new Body(1, earthMass, 1, QPointF(300, 300), QPointF(0, -0.25), true);

bodies.append(newBody);

newBody = new Body(1, moonMass, 2, QPointF(270, 300), QPointF(0, -0.55), true, bodies[1]);

bodies.append(newBody);

newBody = new Body(0.5, mercuryMass, 3, QPointF(393, 300), QPointF(0, -0.39), true, bodies[0]);

bodies.append(newBody);

newBody = new Body(0.8, venusMass, 4, QPointF(342, 300), QPointF(0, -0.28), true, bodies[0]);

bodies.append(newBody);

newBody = new Body(0.9, marsMass, 5, QPointF(223, 300), QPointF(0, -0.2), true, bodies[0]);

bodies.append(newBody);

newBody = new Body(0.2, deimosMass, 6, QPointF(210, 300), QPointF(0, -0.85), true, bodies[5]);

bodies.append(newBody);

newBody = new Body(0.4, phobosMass, 7, QPointF(205, 300), QPointF(0, -0.7), true, bodies[5]);

bodies.append(newBody);

// Підключення головного таймера до функції

connect(timer, QTimer::timeout, this, physics);

timer->start(frameDelay);

t.start();

}

MainWindow::~MainWindow() {

delete ui;

}

// Main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

MainWindow w;

w.show();

return a.exec();

}

Размещено на Allbest.ru

...

Подобные документы

  • Особливості Сонячної системи та космічних тіл в її межах. Роль площини земної орбіти — екліптики. Опис програми, яка демонструє приблизний рух планет. Блок-схеми алгоритмів та структури програми. Опис процедур та обробників. Інструкція користувача.

    курсовая работа [756,6 K], добавлен 17.03.2014

  • Опис основних етапів розробки архітектури програмної системи: структурування системи, моделювання управління, декомпозиція підсистем. Ознайомлення із кроками створення інтерфейсу користувачів як однієї із фаз проектування програмного забезпечення.

    реферат [20,7 K], добавлен 24.11.2010

  • Підстава для створення системи Компас-3D. Характеристика розробленого програмного забезпечення. Призначення і характеристики систем автоматизації конструкторської документації. Дослідження методів створення динамічних бібліотек в середовищі Delphi.

    дипломная работа [3,3 M], добавлен 22.10.2012

  • Етапи розробки проекту. Вимоги до апаратного і програмного забезпечення, до користувача. Специфікація та структура даних, які мають бути розміщеними в системі. Вигляд інтерфейсу системи програмного забезпечення. Розробка бази даних косметичного салону.

    дипломная работа [1,8 M], добавлен 21.02.2015

  • Ознайомлення із загальною структурою системи автоматичного розпізнавання мовлення. Визначення особливостей нейронних мереж. Дослідження та характеристика процесу побудови системи розпізнавання мовлення. Вивчення специфіки прихованої моделі Маркова.

    дипломная работа [1,1 M], добавлен 25.07.2022

  • Вибір основної моделі задачі інформаційної підтримки автопаркінгів. Специфікація системи інформаційного обслуговування автопаркінгу. Здійснення замовлень в системі. Перевірка замовлених місць на парковці. Проектування інтерфейсу системи та бази даних.

    дипломная работа [2,2 M], добавлен 21.06.2014

  • Оптимізація розташування посилань на інформаційні ресурсах у мережевих пошукових системах за допомогою спеціальних вірно обраних ключових слів. Розробка програмного забезпечення SEO-системи для тестування і читання RSS каналів відвідувачами сайту.

    дипломная работа [2,3 M], добавлен 14.06.2013

  • Виявлення основних сутностей предметної області. Побудова схеми реляційної бази даних. Вбудовані процедури і тригери. Опис архітектури програмної системи і концептуальної моделі бази даних, програмної реалізації та інтерфейсу користувача додатку.

    курсовая работа [4,3 M], добавлен 05.12.2012

  • Основні поняття щодо захисту програмного забезпечення. Класифікація засобів дослідження програмного коду: відладчики, дизасемблери, діскомпілятори, трасировщики та слідкуючі системи. Способи вбудовування захисних механізмів в програмне забезпечення.

    курсовая работа [41,7 K], добавлен 14.11.2010

  • Класифікація системи за всіма видами класифікаторів. Графічне представлення узагальненої моделі системи. Дослідження операцій в системі. Класифікація основних умов функціонування системи за факторами, що впливають на здійснення визначеної операції.

    курсовая работа [418,8 K], добавлен 01.06.2013

  • Забезпечення захисту інформації. Аналіз системи інформаційної безпеки ТОВ "Ясенсвіт", розробка моделі системи. Запобігання витоку, розкраданню, спотворенню, підробці інформації. Дослідження та оцінка ефективності системи інформаційної безпеки організації.

    курсовая работа [1,6 M], добавлен 27.04.2014

  • Тривимірна модель мобільного робота. Алгоритмізація моделі та її програмної реалізації з використанням бібліотек MFC та OpenGL. Розробка програмного забезпечення. Середовище розробки проекту Microsoft Visual Studio 2010. Керування рухами маніпулятора.

    курсовая работа [462,9 K], добавлен 03.04.2014

  • Функціональна та забезпечувальна частини комп'ютерної інформаційної системи підприємства. Ознайомлення з програмою автоматизації бухгалтерського обліку "1С: Підприємство 7.7" за допомогою ділової гри. Налагодження настройок, робота в режимі користувача.

    курсовая работа [46,3 K], добавлен 13.05.2011

  • Вибір методів та засобів створення інформаційної системи для обліку і перегляду продукції на складі. Розробка моделі даних для реляційної бази даних, прикладного програмного забезпечення. Тестування програмного додатку, виявлення можливих проблем.

    курсовая работа [1,1 M], добавлен 22.09.2015

  • Формалізована схема системи масового обслуговування. Обгрунтування вибору UML-діаграм для ілюстрації функціонування системи масового обслуговування. Функційна модель, призначена для відображення основних зв’язків між елементами та компонентами системи.

    курсовая работа [343,6 K], добавлен 15.10.2014

  • Класифікація інформаційних систем. Дослідження особливостей мови UML як засобу моделювання інформаційних систем. Розробка концептуальної моделі інформаційної системи поліклініки з використанням середи редактора програмування IBM Rational Rose 2003.

    дипломная работа [930,4 K], добавлен 26.10.2012

  • Аналіз сучасних методів тестування та практичних особливостей проведення тестового контролю. Основи побудови інформаційно-математичної моделі. Алгоритм запису інформації в таблицю бази даних. Характеристика та шляхи розробки інтерфейсу редактора тестів.

    курсовая работа [1,7 M], добавлен 08.10.2010

  • Побудова моделі процесів системи. Відображення користувачів і їхніх функцій, підметів автоматизації в прив'язці до структури системи. Відображення структури інформаційних та фізичних об'єктів системи та їх взаємозв’язків. Побудова моделі станів системи.

    курсовая работа [125,2 K], добавлен 03.10.2008

  • Характеристика основних методів сучасного викладання фізики. Моделювання як процес дослідження об’єктів пізнання за допомогою їх моделей. Розгляд особливостей використання табличного процесора EXCEL для обробки результатів лабораторних робіт з фізики.

    лабораторная работа [1,6 M], добавлен 22.12.2012

  • Огляд існуючих програмних продуктів. Проходження процедури реєстрації. Побудова та опис логічної моделі. Розробка основних форм інтерфейсу користувача. Тестування методом чорної скриньки. Інсталяція серверної частини системи та клієнтських програм.

    курсовая работа [1,8 M], добавлен 03.06.2021

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.