Моделювання експериментів у дзеркальній кімнаті

Теоретичні відомості для моделювання оптичних експериментів в дзеркальній кімнаті. Закони відбивання променів від дзеркал. Особливості об’єктно-орієнтованого програмування. Програмна реалізація моделі оптичних експериментів в дзеркальній кімнаті.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 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.2007

  • Unified 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

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