Допомога у написанні освітніх робіт...
Допоможемо швидко та з гарантією якості!

Програма задачі та її опис

РефератДопомога в написанніДізнатися вартістьмоєї роботи

NewP = TVector: Reflect (ps, p,*sides); NewP = TVector: Reflect (ps, p,*sides); Sides→draw (Form→PaintBox1→Canvas); Form→PaintBox1→Canvas→Pen→Width=2; Form→PaintBox1→Canvas→Pen→Width=1; RMirror* apriori = (RMirror*)sides; RMirror* apriori = (RMirror*)sides; RMirror* apriori = (RMirror*)sides; RMirror* apriori = (RMirror*)sides; Found = pointOnSegment (sides, p… Читати ще >

Програма задачі та її опис (реферат, курсова, диплом, контрольна)

У класі Experiment описаний метод Do який розраховує точки відбивання, код якого наведений нижче.

void Do (TPoint s1, TPoint s2, int _reflections).

{.

reflections = _reflections;

start = Line (s1,s2);

ps.clear ();

ps.push_back (s1);

int q = reflections;

Line last = start;

int j=-1;

bool found = false, logic;

TPoint p, newP;

int i;

for (i=0;i.

{.

logic=false;

if (i==j) continue;

p = cross (sides[i],&last);

found = pointOnSegment (sides[i], p) && (Direction (s1,s2)==Direction (s1,p));

if (found && typeid (*sides[i])≠typeid (FlatMirror)).

{RMirror* apriori = (RMirror*)sides[i];

p = ArcPoint (last, apriori, p);

logic=true;}}.

if (logic == false).

newP = TVector: Reflect (ps[ps.size ()-1], p,*sides[i-1]);

else.

{.

RMirror* apriori = (RMirror*)sides[i-1];

TVector nn = TVector: normal (apriori->center, p);

newP = TVector: Reflect (ps[ps.size () — 1], p, FlatMirror (Point (p.x+nn.x, p. y+nn.y), Point (p.x-nn.x, p. y-nn.y)));

}.

ps.push_back (p);

last = Line (p, newP);

j=i-1;

while (q>0){.

found = false;

for (i=0;i.

{.

logic = false;

if (i==j) continue;

p = cross (sides[i],&last);

found = pointOnSegment (sides[i], p);

if (found && typeid (*sides[i])≠typeid (FlatMirror)).

{.

RMirror* apriori = (RMirror*)sides[i];

p = ArcPoint (last, apriori, p);

logic=true;

}.

}.

if (logic == 0).

newP = TVector: Reflect (ps[ps.size ()-1], p,*sides[i-1]);

else.

{.

RMirror* apriori = (RMirror*)sides[i-1];

TVector nn = TVector: normal (apriori->center, p);

newP = TVector: Reflect (ps[ps.size ()-1], p, FlatMirror (Point (p.x+nn.x, p. y+nn.y), Point (p.x-nn.x, p. y-nn.y)));

}.

ps.push_back (p);

last = Line (p, newP);

j=i-1;

q—;

}.

}.

Також в класі Experiment описаний метод draw, код якого наведений нижче.

void draw (TForm1* Form).

{.

Form->PaintBox1->Canvas->Pen->Width=1;

Form->PaintBox1->Canvas->Pen->Color=clBlack;

Form->PaintBox1->Canvas->Brush->Color=clWhite;

for (int i = 0;i.

{.

sides[i]->draw (Form->PaintBox1->Canvas);

}.

if (reflections==0) return;

Form->PaintBox1->Canvas->Pen->Width=2;

Form->PaintBox1->Canvas->Pen->Color=clYellow;

Form->PaintBox1->Canvas->Brush->Color=clYellow;

Form->Lock ();

for (int i = 0;i.

{.

AnimateLine (ps[i], ps[i+1], Form->PaintBox1->Canvas);

Application->ProcessMessages ();}.

Form->Unlock ();}.

Даний програмний продукт створений для моделювання моделювання оптичних експериментів в дзеркальній кімнаті. Дана програма реалізована на мові C++, в компіляторі Borland C++ Builder 6.

Інтерфейс програми складається з двох вікон. Перше вікно відповідає за параметри дзеркал (Рис. 7.1.1), друге за візуалізацію експермента (Рис. 7.1.2).

Параметри дзеркал.

Рис. 3.2.1 Параметри дзеркал

Проведення експермента.

Рис. 3.2.2 Проведення експермента

Меню програми включає в себе наступні пункти:

  • · Файл
  • · Експермент

Файл Даний пункт дозволяє користувачу відкрити раніше збережений файл чи зберегти експеримент в новий файл.

Експермент Даний пункт меню складається з декількох підпунктів, які допоможуть користувачу в:

  • · побудові нового многокутника (кімнати), за це відповідає пункт — Побудувати заново многокутник;
  • · проведенні нового експерименту, пункт — Повторити експеримент;
  • · змінах розмірів сторін, пункт — Змінити розміри сторін;
  • · завершенні змін розмірів сторін — Завершити зміни ;
  • · змінах параметрів сторін (кількість дзеркал, тип дзеркала, радіус кривизни) — Змінити параметри дзеркал.

На вікні Відбивання променів від дзеркал також знаходиться текстове поле, в якому користувач вказує кількість відбивань. Справа в інформаційному полі можете спостерігати за ходом експерименту де вказана початкова точка та точки відбивань.

Показати весь текст
Заповнити форму поточною роботою