Смекни!
smekni.com

Преломление света на границе раздела двух сред (стр. 3 из 4)

А.4 Требования к программному продукту

А.4.1. Общие требования:

К данному программному продукту предъявляются следующие требования:

а) наличие графического пользовательского интерфейса;

б) возможность работы с файлом;

в) наличие справочного материала;

г) наличие справки о разработчике;

л) наличие контроля вводимых данных.

А.4.2. Функциональные требования:

Программный продукт должен обладать следующими функциями:

- расчет угла отражения на основании угла падения и коэффициентов преломления;

- вывод результатов графически.

А.4.3. Требования к техническому обеспечению

Программный продукт должен нормально функционировать на машине со следующими характеристиками:

- процессор I486 или выше;

- 16 Mb оперативной памяти;

- VGA - монитор с поддержкой разрешения 640x480.

А.4.4. Организационные требования

Программный продукт должен быть снабжен пояснительной запиской объёмом не менее 30 страниц;

документация должна быть оформлена в соответствии с ДСТУ 3008-95 "Документация. Отчеты в сфере науки и техники и правила оформления".

А.5 Этапы разработки и сроки выполнения работы

разработки и плановые сроки выполнения указаны в таблице А.1

Таблица А.1 Этапы и сроки выполнения работы

Вид работы Неделя
1 Получения задания на разработку 17.02.06
2 Разработка и согласование технического задания 1 неделя
3 Подбор и изучение материала по теме "Преломление лучей на границе раздела двух сред". Определение структуры программы 2-3 недели
4 Разработка алгоритмов, отвечающих за ввод данных 4-5 неделя
5 Разработка алгоритма расчета угла преломления 6-7 неделя
6 Разработка и реализация графического и пользовательского интерфейса 8-9 неделя
7 Тестирование и отладка программы 10-11 неделя
8 Написание пояснительной записки 11-12 неделя
9 Защита курсовой работы 05.06.06

Приложение Б

РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

Б.1 Установка программы

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

Б. З Главное меню

Меню содержит следующие пункты: "Информация", "Считать данные из файла", "Изменить показатель преломления в 1-ой среде", "Изменить показатель преломления во 2-ой среде", "Изменить угол падения", "Выход". Передвижение по меню осуществляется при помощи клавиш "вверх" и "вниз", а также при помощи горячих клавиш.

Б. З.1 "Информация"

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

Б. З.2 "Считать данные из файла"

При вызове этого пункта выполнится загрузка данных из файла "data. txt". Также выполнится пересчет угла преломления, вывод результатов на экран и в файл.

Б.3.3. "Изменить показатель преломления в 1-ой среде", "Изменить показатель преломления во 2-ой среде"

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

Б.3.4. "Изменить угол падения"

При вызове этого пункта пользователь сможет изменить угол падения клавишами "вверх" и "вниз" а затем подтвердить или отменить ввод (клавиши ENTER и ESC соответственно).

Б.3.5. "Выход"

При нажатии этой клавиши происходит выход из программы

Приложение В

ФАЙЛЫ СПРАВОЧНОЙ ИНФОРМАЦИИ

info. txt – содержит теоретическую информацию о преломлении лучей.

Отражение и преломление света

на границе раздела двух сред

Рассмотрим падение плоской волны на границу, разделяющую две прозрачные однородные диэлектрические среды с показателями преломления n и n1. Будем считать, что граница представляет собой плоскость (так как в пределах бесконечно малой области любую поверхность можно считать плоской). Будем также считать, что сама граница раздела свет не поглощает.

После прохождения границы раздела двух сред падающая плоская волна разделяется на две волны: проходящую во вторую среду и отраженную.

Угол падения - это угол между лучом, падающим на преломляющую или отражающую поверхность и нормалью к поверхности в точке падения.

Угол преломления - это угол между преломленным лучом и нормалью к поверхности в точке преломления.

Угол отражения - это угол между отраженным лучом и нормалью к поверхности в точке отражения.

Закон преломления:

Качественная часть закона:

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

Количественная часть закона:

Произведение показателя преломления на синус угла между лучом и нормалью сохраняет свое значение при переходе в следующую среду:

n*sin(alpha) = n1*sin(alpha)

Приложение Г

РЕЗУЛЬТАТЫ РАБОТЫ ПРОГРАММЫ

Файл result. txt содержит результаты работы программы:

Показатель преломления n=1.0003

Угол падения alpha=60

Показатель преломления n1=1.3300

Угол преломления alpha1=41

Приложение Д

ЭКРАННЫЕ ФОРМЫ

Рисунок Д.1-Вывод реквизитов

Рисунок Д.2-Главное меню


Рисунок Д.3-Информация о преломлении лучей

Рисунок Д.4-Изменение угла падения

Приложение Е

ЛИСТИНГ ПРОГРАММЫ

usesgraph, crt;

function arcsin (x: real): real; {возвращает арксинус угла}

begin

if (x=1) then arcsin: = PI/2 else

if (x=-1) then arcsin: = - 1*PI/2 else

if (x>0) then

arcsin: =arctan(sqrt((x*x) /(1-x*x))) else

arcsin: =-arctan(sqrt((x*x) /(1-x*x)));

end;

function ReCalc(n: real; n1: real; alpha: real): real; {высчитывает угол преломления}

var

radalpha, radalpha1: real; {углы в радианах}

begin

radalpha: =alpha*PI/180;

if ((n*sin(radalpha) /n1) <=1) then

begin

radalpha1: =arcsin(n*sin(radalpha) /n1);

ReCalc: =radalpha1*180/PI;

end

else

begin

ReCalc: =arcsin(1) *180/PI;

end;

end;

procedure Recv; {выводит на экран реквизиты пользователя}

var

f: text; {файл содержащий реквизиты пользователя}

n: integer;

s: string;

begin

n: =0;

{открываем файл для чтения}

assign(f, 'recv. txt');

reset(f);

ClearViewPort;

SetTextStyle(8,0,1);

SetColor (White);

{выводим содержимое файла на экран}

while not eof(f) do

begin

n: =n+15;

readln (f,s);

OutTextXY(0, n, s);

end;

{закрываем файл}

close(f);

repeat until keypressed;

readkey;

ClearViewPort;

end;

function Menu(number: Integer): Integer;

const

Selected = Cyan;

UnSelected = 255;

IV = 20;

var

str1: string;

ch: char;

begin

SetTextStyle(8,0,1);

while (true) do

begin

if (number=1) then

SetColor(Selected)

else SetColor (UnSelected);

OutTextXY(0, 1*IV, 'Информация (F1) ');

if (number=2) then

SetColor(Selected)

else SetColor (UnSelected);

OutTextXY(0, 2*IV, 'Считать данные из файла (L) ');

if (number=3) then

SetColor(Selected)

else SetColor (UnSelected);

OutTextXY(0, 3*IV, 'Изменить показатель преломления в 1-ой среде (1) ');

if (number=4) then

SetColor(Selected)

else SetColor (UnSelected);

OutTextXY(0, 4*IV, 'Изменить показатель преломления во 2-ой среде (2) ');

if (number=5) then

SetColor(Selected)

else SetColor (UnSelected);

OutTextXY(0, 5*IV, 'Изменить угол падения (A) ');

if (number=6) then

SetColor(Selected)

else SetColor (UnSelected);

OutTextXY(0, 6*IV, 'Выход (Esc) ');

SetColor(UnSelected);

ch: =ReadKey;

{если нажали esc - выходим}

if (ch = #27) then

begin

Menu: = 6;

break;

end;

{f1}

if (ch = #59) then

begin

Menu: = 1;

break;

end;

if ((ch = 'L') or (ch = 'l')) then

begin

Menu: = 2;

break;

end;

if ((ch = 'A') or (ch = 'a')) then

begin

Menu: = 5;

break;

end;

if (ch = '1') then

begin

Menu: = 3;

break;

end;

if (ch = '2') then

begin

Menu: = 4;

break;

end;

{"вверх" и "вниз"}

if (ch = #72) then number: =number-1;

if (ch = #80) then number: =number+1;

if (number = 0) then number: = 6;

if (number = 7) then number: = 1;

{ENTER}

if (ch = #13) then

begin

Menu: = number;

break;

end;

end;

end;

procedure GraphMode;

var

gd,gm: Integer;

begin

{драйвер - VGA, режим - VGAHi (640*480) }

gd: = VGA;

gm: = VGAHi;

InitGraph (gd,gm,''); {инициализация графики}

end;

procedure SaveData(n: real; n1: real; alpha: real); {сохраняет данные в файл}

var

f: text;

alpha1: real;

tempstr: string;

begin

alpha1: =ReCalc(n,n1,alpha);

assign(f, 'result. txt');

rewrite(f);

Str(n: 6: 4, tempstr);

writeln(f,concat('Показатель преломления n=', tempstr));

Str(alpha: 2: 0, tempstr);

writeln(f,concat('Угол падения alpha=', tempstr));

Str(n1: 6: 4, tempstr);

writeln(f,concat('Показатель преломления n1=', tempstr));

Str(alpha1: 2: 0, tempstr);

writeln(f,concat('Угол преломления alpha1=', tempstr));

close(f);

end;

procedure Paint(n: real; n1: real; alpha: real);

var

mx,my: Integer; {максимальные значения экранных координат}

delta,delta1: real;

radalpha, radalpha1, alpha1: real;

tempstr: string;

begin

{находим максимальные значения экранных координат}

mx: =GetMaxX;

my: =GetMaxY;

{пересчитываем угол преломления, находим радианные значения углов}

alpha1: =ReCalc(n, n1, alpha);

radalpha: =alpha*PI/180;

radalpha1: =alpha1*PI/180;

if (cos(radalpha) <>0.0) then

delta: = (my/3) *sqrt(1/sqr(cos(radalpha)) - 1)

else

delta: = 100000; {если косинус равен 0 - луч лежит на границе}

if (cos(radalpha1) <>0.0) then

delta1: = (my/3) *sqrt(1/sqr(cos(radalpha1)) - 1)

else

delta1: =-100000; {если косинус равен 0 - луч лежит на границе}

SetColor(White);

SetTextStyle(8, 0, 1);

{выводим n,alpha,n1,alpha1}

Str(n: 6: 4, tempstr);

OutTextXY(3, round(2*my/3-40), concat('n= ', tempstr));

Str(alpha: 2: 0, tempstr);

OutTextXY(3, round(2*my/3-20), concat('alpha= ', tempstr));