Моделювання експериментів у дзеркальній кімнаті
Теоретичні відомості для моделювання оптичних експериментів в дзеркальній кімнаті. Закони відбивання променів від дзеркал. Особливості об’єктно-орієнтованого програмування. Програмна реалізація моделі оптичних експериментів в дзеркальній кімнаті.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | украинский |
Дата добавления | 13.11.2016 |
Размер файла | 193,2 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
double b = (-l.C)/l.B;
double rr = mirror->radius*mirror->radius;
double a = mirror->center.x;
double d = mirror->center.y;
double D=pow((2*k*b-2*a-2*d*k),2)-(4+4*k*k)*(b*b-rr+a*a+ +d*d-2*d*b);
ShowMessage(D);
if(D<0) throw AnsiString("FAIL");
double x1 = (-(2*k*b-2*a-2*d*k)+sqrt(D))/(2+2*k*k);
double x2 = (-(2*k*b-2*a-2*d*k)-sqrt(D))/(2+2*k*k);
double y1 = k*x1+b;
double y2 = k*x2+b;
TPoint p1(x1,y1);
TPoint p2(x2,y2);
return (len(p1,p)<len(p2,p)) ? p1 : p2;
}
//метод, що визначає напрям променя
int Direction(const TPoint & s1,const TPoint &s2)
{
if( s2.x>s1.x && s2.y>s1.y)
return 1;
if( s2.x<s1.x && s2.y>s1.y)
return 2;
if( s2.x<s1.x && s2.y<s1.y)
return 3;
if( s2.x>s1.x && s2.y<s1.y)
return 4;
}
//метод, що відповідає за збереження експерименту в файл
void SaveToFile(const char* filename)
{
ofstream ff(filename);
ff<<count<<endl;
ff<<reflections<<endl;
ff<<sides;
ff<<start.A<<endl;
ff<<start.B<<endl;
ff<<start.C<<endl;
for(int i=0;i<ps.size();i++)
{
ff<<ps[i].x<<" "<<ps[i].y<<endl;
}
ff.close();
}
// метод, що відповідає за завантаження експерименту з файлу
static Experiment* LoadFromFile(const char* filename)
{
Experiment *ex = new Experiment;
ifstream ff(filename);
ff>>ex->count;
ff>>ex->reflections;
ff>>ex->sides;
ff>>ex->start.A;
ff>>ex->start.B;
ff>>ex->start.C;
vector<TPoint> p(ex->reflections+2);
for(int i=0;i<ex->reflections+2;i++)
{
ff>>p[i].x>>p[i].y;
}
ex->ps=p;
ff.close();
return ex;
}
};
//функція, що повертає довільну точку з многокутника
TPoint Orient(TPoint* points, int count,int i)
{
Line l1(points[i],points[(i+count/2)%count]),l2;
if(i<count-1)
l2=Line(points[i+1],points[(i+1+count/2)%count]);
else
l2 = Line(points[0],points[count/2]);
TPoint p = Experiment::cross(&l1,&l2);
return p;
}
//функція, що перевіряє чи перетнуться два відрізки
bool SegmentsCross(Mirror* s1,Mirror* s2)
{
TPoint p = Experiment::cross(s1,s2);
return Experiment::pointOnSegment(s1,p) || Experiment::pointOnSegment(s2,p);
}
//функція, що повертає точку, яка знаходиться між двома заданими
TPoint Middle(const TPoint& p1,const TPoint& p2)
{
int minX = p1.x<p2.x ? p1.x : p2.x;
int minY = p1.y<p2.y ? p1.y : p2.y;
int dx = abs(p1.x-p2.x)/2;
int dy = abs(p1.y-p2.y)/2;
return TPoint(minX+dx,minY+dy);
}
//функція, що повертає відстань між двома точками
double len(const TPoint& p1,const TPoint& p2)
{
double res;
res = sqrt(pow(p2.x-p1.x,2.0)+pow(p2.y-p1.y,2.0));
return res;
}
//функція, що знаходить точку відбивання
TPoint TVector::Reflect(TPoint a, TPoint c, const Mirror& line)
{
TVector l(a,c);
TVector n = normal(line.p1,line.p2);
TVector r = l - ((2*n)*((l*n)/(n*n)));
return TPoint(c.x+r.x, c.y+r.y);
}
//функція, що розраховує кут між двома прямими
double angle(Line l1, Line l2)
{
double co,alpha,a,b;
a = (l1.A*l2.A+l1.B*l2.B);
b = (sqrt(l1.A*l1.A+l1.B*l1.B)*sqrt(l2.A*l2.A+l2.B*l2.B));
if(a==0||b==0) co=1;
else
co=a/b;
alpha = acos(co);
return alpha;
}
Unit2.cpp
#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
struct MirrorParam
{
TPanel* Panel;
TComboBox* ComboBox;
TUpDown* UpDown;
TLabeledEdit* LabeledEdit;
void Hide()
{
Panel->Visible=false;
}
void Show()
{
Panel->Visible=true;
}
void OnChange()
{
UpDown->Visible = (bool)ComboBox->ItemIndex;
LabeledEdit->Visible = (bool)ComboBox->ItemIndex;
}
} Panels[9];
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
for(int i=0;i<9;i++)
{
Panels[i].Panel = (TPanel*)FindComponent("Panel"+AnsiString(i+1));
Panels[i].ComboBox = (TComboBox*)FindComponent("ComboBox"+AnsiString(i+1));
Panels[i].ComboBox->Tag=i+1;
Panels[i].UpDown = (TUpDown*)FindComponent("UpDown"+AnsiString(i+1));
Panels[i].UpDown->Tag=i+1;
Panels[i].LabeledEdit = (TLabeledEdit*)FindComponent("LabeledEdit"+AnsiString(i+1));
mirrors[i]=0;
radiuses[i]=100;
Panels[i].OnChange();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::ComboBox1Change(TObject *Sender)
{
TComboBox* Cb = dynamic_cast<TComboBox*>(Sender);
Panels[Cb->Tag-1].OnChange();
mirrors[Cb->Tag-1]=Cb->ItemIndex;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::UpDown10Click(TObject *Sender, TUDBtnType Button)
{
for(int i=0;i<9;i++)
{
if(i<UpDown10->Position)
Panels[i].Show();
else
Panels[i].Hide();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::UpDown1Click(TObject *Sender, TUDBtnType Button)
{
TUpDown* ud = dynamic_cast<TUpDown*>(Sender);
radiuses[ud->Tag-1]=ud->Position;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
Close();
Form1->Init();
}
//---------------------------------------------------------------------------
Размещено на Allbest.ru
...Подобные документы
Редагування за допомогою текстового редактора NotePad вхідного файлу даних. Програмна реалізація основного алгоритму з використанням засобів об'єктно-орієнтованого програмування. Об’ява та опис класів і об'єктів. Розробка допоміжних програмних засобів.
курсовая работа [69,4 K], добавлен 14.03.2013Описано вказану систему, побудована її концептуальна модель, зроблено формальний опис системи та імітаційної моделі, виконано програмування моделі системи та наведено результати моделювання.
курсовая работа [73,1 K], добавлен 16.06.2007Unified modeling language як мова об'єктно-орієнтованого моделювання. Дослідження сучасних сase-засобів моделювання бізнес процесів. Кодогенератор для забезпечення зв'язку між Delphi і Rose. Перелік основних інструментів для створення моделі в ERwin.
дипломная работа [3,2 M], добавлен 22.10.2012Модель в об’єктно-орієнтованих мовах програмування. Програмна модель створена на мові програмування С++, в середовищі програмування Borland С++ Builder 6.0. Вибір засобів реалізації програми. Види інструментів для об'єктно-орієнтованої розробки.
курсовая работа [116,9 K], добавлен 06.06.2010Загальні відомості, методи та постановка задачі динамічного програмування. Практичне застосування методу динамічного програмування на прикладі розподілення вантажів між 4-ма торговими суднами. Рекурентна природа обчислень в динамічному програмуванні.
курсовая работа [1,1 M], добавлен 22.05.2015Особливості редагування за допомогою текстового редактора NotePad вхідного файлу. C++ як універсальна мова програмування, знайомство с функціями. Характеристика графічних засобів мови С. Аналіз основних понять об’єктно-орієнтованого програмування.
курсовая работа [123,3 K], добавлен 14.03.2013Принципи об'єктно-орієнтованого підходу. Розробка програмного комплексу з використанням цього алгоритму і користувальницьких класів на мові програмування С++. Реалізація простого відкритого успадкування. Тестування працездатності системи класів.
курсовая работа [98,0 K], добавлен 06.05.2014Огляд суті гри "Доміно", характеристика її існуючих програмних реалізацій. Розробка евристичного алгоритму для розв’язання ігрової ситуації "Доміно". Програмна реалізація алгоритму мовою програмування високого рівня C#. Отладка оціночної функції.
курсовая работа [1,4 M], добавлен 14.05.2012Технології об'єктно-орієнтованого аналізу та проектування інформаційних систем. Історія та структура мови UML. Опис функціональної моделі засобами UML. Використання UML в проектуванні програмного забезпечення. Характеристика CASE-засобів Visual Paradigm.
дипломная работа [7,9 M], добавлен 26.05.2012Засоби візуального моделювання об'єктно-орієнтованих інформаційних систем. Принципи прикладного системного аналізу. Принцип ієрархічної побудови моделей складних систем. Основні вимоги до системи. Розробка моделі програмної системи засобами UML.
курсовая работа [546,6 K], добавлен 28.02.2012Розробка програми для моделювання роботи алгоритму Дейкстри мовою C# з використанням об’єктно-орієнтованих принципів програмування. Алгоритм побудови робочого поля. Програмування графічного інтерфейсу користувача. Тестування програмного забезпечення.
курсовая работа [991,4 K], добавлен 06.08.2013Класифікація інформаційних систем. Дослідження особливостей мови UML як засобу моделювання інформаційних систем. Розробка концептуальної моделі інформаційної системи поліклініки з використанням середи редактора програмування IBM Rational Rose 2003.
дипломная работа [930,4 K], добавлен 26.10.2012Сутність та особливості параметричного, воксельного, полігонального моделювання, моделювання сплайнами та скульптингу. Застосування 3D моделювання в науці, техніці, рекламі, маркетингу, дизайні інтер'єру, архітектурі, анімаці, кіно та медицині.
доклад [873,9 K], добавлен 04.05.2022Концепції об'єктно-орієнтованого програмування. Конструктори та деструктори. Успадкування класів. Побудова об’єктної моделі. Визначення об'єктів та класів і зв’язків між ними. Реалізація програми в середовищі Visual Studio C++. Інтерфейс програми.
курсовая работа [743,7 K], добавлен 25.01.2016Програмування математичної моделі довільної ланки хіміко-технологічної системи та дослідження її динамічних характеристик. Система Mat Lab – середовище програмування. Побудова програмними засобами кривих перехідних процесів, логарифмічних характеристик.
курсовая работа [551,3 K], добавлен 12.01.2011Визначення найкращого режиму роботи системи обробки повідомлень. Представлення моделі у вигляді системи масового обслуговування. Визначення структури моделі. Обмеження на зміну величин. Програмна реалізація імітаційної моделі. Оцінка адекватності.
курсовая работа [153,9 K], добавлен 29.01.2013Концепції об'єктно-орієнтованого програмування. Методи створення класів. Доступ до методів базового класу. Структура даних, функції. Розробка додатку на основі діалогових вікон, програми меню. Засоби розробки програмного забезпечення мовами Java та С++.
курсовая работа [502,5 K], добавлен 01.04.2016Основні принципи об’єктно-орієнтованого програмування. Типові середовища програмування та особливості мови С++. Етапи проектування БД. Розробка програмного забезпечення для реалізації створення бази відеофільмів. Основні положення та моделі БД.
курсовая работа [2,7 M], добавлен 24.03.2011Прототип об'єктно-орієнтованого програмування. Управління процесом реалізації програми. Розвиток апаратних засобів. Об'єктно-орієнтовані мови програмування. Надійність і експлуатаційні якості програм. Візуальне об’єктна-орієнтовне проектування Delphi.
контрольная работа [28,9 K], добавлен 18.05.2009Особливості об'єктно-орієнтованого програмування. Розробка програми для елементарних математичних розрахунків, виведення результату на екран та запису у файлі. Сортування слів у рядку. Програма, яка реалізовує ходи шахових фігур. Програма-калькулятор.
отчет по практике [2,0 M], добавлен 19.03.2015