|
Преломление света на границе раздела двух сред |
.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-Изменение угла паденияПриложение ЕЛИСТИНГ ПРОГРАММЫuses graph, crt; function arcsin (x: real): real; {возвращает арксинус угла}beginif (x=1) then arcsin: = PI/2 elseif (x=-1) then arcsin: = - 1*PI/2 elseif (x>0) thenarcsin: =arctan(sqrt((x*x) /(1-x*x))) elsearcsin: =-arctan(sqrt((x*x) /(1-x*x))); end; function ReCalc(n: real; n1: real; alpha: real): real; {высчитывает угол преломления}varradalpha, radalpha1: real; {углы в радианах}beginradalpha: =alpha*PI/180; if ((n*sin(radalpha) /n1) <=1) thenbeginradalpha1: =arcsin(n*sin(radalpha) /n1); ReCalc: =radalpha1*180/PI; endelsebeginReCalc: =arcsin(1) *180/PI; end; end; procedure Recv; {выводит на экран реквизиты пользователя}varf: text; {файл содержащий реквизиты пользователя}n: integer; s: string; beginn: =0; {открываем файл для чтения}assign (f, 'recv. txt'); reset(f); ClearViewPort; SetTextStyle(8,0,1); SetColor (White); {выводим содержимое файла на экран}while not eof(f) dobeginn: =n+15; readln (f,s); OutTextXY(0, n, s); end; {закрываем файл}close(f); repeat until keypressed; readkey; ClearViewPort; end; function Menu(number: Integer): Integer; constSelected = Cyan; UnSelected = 255; IV = 20; varstr1: string; ch: char; beginSetTextStyle(8,0,1); while (true) dobeginif (number=1) thenSetColor(Selected) else SetColor (UnSelected); OutTextXY(0, 1*IV, 'Информация (F1) '); if (number=2) thenSetColor(Selected) else SetColor (UnSelected); OutTextXY(0, 2*IV, 'Считать данные из файла (L) '); if (number=3) thenSetColor(Selected) else SetColor (UnSelected); OutTextXY(0, 3*IV, 'Изменить показатель преломления в 1-ой среде (1) '); if (number=4) thenSetColor(Selected) else SetColor (UnSelected); OutTextXY(0, 4*IV, 'Изменить показатель преломления во 2-ой среде (2) '); if (number=5) thenSetColor(Selected) else SetColor (UnSelected); OutTextXY(0, 5*IV, 'Изменить угол падения (A) '); if (number=6) thenSetColor(Selected) else SetColor (UnSelected); OutTextXY(0, 6*IV, 'Выход (Esc) '); SetColor(UnSelected); ch: =ReadKey; {если нажали esc - выходим}if (ch = #27) thenbeginMenu: = 6; break; end; {f1}if (ch = #59) thenbeginMenu: = 1; break; end; if ((ch = 'L') or (ch = 'l')) thenbeginMenu: = 2; break; end; if ((ch = 'A') or (ch = 'a')) thenbeginMenu: = 5; break; end; if (ch = '1') thenbeginMenu: = 3; break; end; if (ch = '2') thenbeginMenu: = 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) thenbeginMenu: = number; break; end; end; end; procedure GraphMode; vargd,gm: Integer; begin{драйвер - VGA, режим - VGAHi (640*480) }gd: = VGA; gm: = VGAHi; InitGraph (gd,gm,''); {инициализация графики}end; procedure SaveData(n: real; n1: real; alpha: real); {сохраняет данные в файл}varf: text; alpha1: real; tempstr: string; beginalpha1: =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); varmx,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) thendelta: = (my/3) *sqrt(1/sqr(cos(radalpha)) - 1) elsedelta: = 100000; {если косинус равен 0 - луч лежит на границе}if (cos(radalpha1) <>0.0) thendelta1: = (my/3) *sqrt(1/sqr(cos(radalpha1)) - 1) elsedelta1: =-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)); Str(n1: 6: 4, tempstr); OutTextXY(3, round(2*my/3), concat('n1= ', tempstr)); Str(alpha1: 2: 0, tempstr); OutTextXY(3, round(2*my/3+20), concat('alpha1= ', tempstr)); {выводим рамку}SetColor(Yellow); SetLineStyle(SolidLn, 0, NormWidth); Line(0, round(my/3), mx, round(my/3)); Line(0, my, mx, my); Line(0, round(my/3), 0, my); Line(mx, round(my/3), mx, my); {выводим границу между средами и нормаль}SetColor(LightGray); SetLineStyle(DottedLn, 0, NormWidth); Line(round(mx/2), round(my/3), round(mx/2), my); Line(0, round(2*my/3), mx, round(2*my/3)); {выводим стрелочки}SetLineStyle(SolidLn, 0, NormWidth); Line(round(mx/2) - 3, round(my/3) +10, round(mx/2), round(my/3)); Line(round(mx/2) +3, round(my/3) +10, round(mx/2), round(my/3)); {выводим падающий луч}SetColor(Blue); SetLineStyle(SolidLn, 0, NormWidth); Line(round(mx/2), round(2*my/3), round(mx/2+delta), round(my/3)); {выводим преломленный луч}SetColor(Red); SetLineStyle(SolidLn, 0, NormWidth); Line(round(mx/2), round(2*my/3), round(mx/2-delta1), round(my)); end; procedure OutTextChangeAl; {выводит вспомогательный текст при смене значения угла}beginSetColor(White); SetTextStyle(8, 0, 1); OutTextXY(0,0, 'Значение угла падения меняется клавишами '); OutTextXY(0, 20, '"вверх" и "вниз"'); OutTextXY(0,40, 'подтверждение - ENTER'); OutTextXY(0,60, 'отмена - ESC'); end; function ChangeAl(n: real; n1: real; alpha: real): real; varch: char; alpha0: real; begin{запоминаем начальное значение угла на случай отмены}alpha0: =alpha; while (true) dobeginClearViewPort; Paint(n,n1,alpha); OutTextChangeAl; ch: = readkey; if (ch = #72) then alpha: =alpha-1; if (ch = #80) then alpha: =alpha+1; if (alpha = 90) then alpha: = 89; if (alpha = - 1) then alpha: = 0; if (ch = #13) thenbeginSaveData(n,n1,alpha); {сохраняем данные}ChangeAl: = alpha; break; end; if (ch = #27) thenbeginChangeAl: = alpha0; break; end; end; end; function ChangeN(flag: integer): real; vartempstr: string; ch: char; n: real; code: integer; begin{переход в текстовый режим}CloseGraph; {принимаются только символы 1-9}while ((ch<'1') or (ch>'9')) dobeginClrScr; str(flag, tempstr); writeln(concat('Выберите ',tempstr,'-ую среду: ')); writeln('1. Вода'); writeln('2. Глицерин'); writeln('3. Алмаз'); writeln('4. Воздух'); writeln('5. Полиэтилен'); writeln('6. Сапфир'); writeln('7. Хлористый натрий'); writeln('8. Сероуглерод'); writeln('9. Другая среда'); ch: =readkey; end; if (ch = '1') then ChangeN: =1.33; if (ch = '2') then ChangeN: =1.47; if (ch = '3') then ChangeN: =2.42; if (ch = '4') then ChangeN: =1.0003; if (ch = '5') then ChangeN: =1.52; if (ch = '6') then ChangeN: =1.77; if (ch = '7') then ChangeN: =1.53; if (ch = '8') then ChangeN: =1.63; if (ch = '9') thenbeginrepeatClrScr; write('Введите показатель преломления среды: '); readln(tempstr); val(tempstr, n, code); until ((code = 0) and (n<=9) and (n>0)); ChangeN: =n; end; GraphMode; end; procedure LoadData(var n: real; var n1: real; var alpha: real); {загрузка данных из файла}varf: text; begin{открываем файл для чтения}assign (f, 'data. txt'); reset (f); {считываем по порядку значения n,n1,alpha}readln(f, n); readln(f, n1); readln(f, alpha); close (f); SaveData(n,n1,alpha); {сохраняем данные}end; procedure Info; varf: Text; n, i: Integer; s, temp: String; ch: Char; priznak: Boolean; constst_length = 55; ch_size = 20; beginn: = 0; priznak: = false; Assign(f, 'info. txt'); ClearViewPort; SetTextStyle (1, 0, 1); Reset (f); while not Eof(f) dobeginn: = n + 1; if not priznak then ReadLn (f, s); if Length(s) > st_length thenbeginpriznak: = true; temp: = s; Delete (temp, st_length+1, Length(temp)); OutTextXY(0, ch_size * n, temp); Delete (s, 1, st_length); endelsebeginpriznak: = false; OutTextXY (0, ch_size * n, s); end; if (n = 22) or Eof(f) thenbeginOutTextXY (200, 460, 'Нажмите любую клавишу... '); repeat until keypressed; ch: = readkey; n: = 0; ClearViewPort; end; end; end; procedure MainCycle; {основной цикл программы}varaction: Integer; n,n1,alpha,sinalpha1: real; begin{установка начальных значений}n: =1.0003; {показатель воздуха}n1: =1.33; {показатель воды}alpha: =60; {начальное значение угла падения}SaveData(n,n1,alpha); action: =1; {курсор установлен на первом пункте меню}GraphMode; {гр режим. }ClearViewPort; {очищаем экран}Recv; {выводим реквизиты пользователя}SetTextStyle (1, 0, 1); while (action<>6) do {6=выход}beginClearViewPort; {очищаем экран}Paint(n,n1,alpha); {выводим график}action: =Menu(action); {считываем пункт меню}if (action=1) then Info; {информация}if (action=2) then LoadData(n,n1,alpha); {считываем из файла}if (action=3) thenbeginn: = ChangeN(1); {изменяем показатель преломления 1}SaveData(n,n1,alpha); end; if (action=4) thenbeginn1: = ChangeN(2); {изменяем показатель преломления 2}SaveData(n,n1,alpha); end; if (action=5) then alpha: = ChangeAl(n,n1,alpha); {изменяем угол падения}end; CloseGraph; {закрываем графический режим}end; beginMainCycle; end. ИСПОЛЬЗУЕМАЯ ЛИТЕРАТУРАФаронов В.В. "Турбо Паскаль 7.0. Начальный курс. " Учебное издание - М.: Нолидж, 2000, 575 с. Н. Культин "Turbo Pascal в задачах и примерах" - С.: БХВ-Петербург, 2004,256 с. Ахманов С. Г "Физическая оптика. Учебник (Ахманов)" - С.: МГУ, 2004, 213 с. Федоров А. "Особенности программирования на Borland Pascal" - Киев: Диалектика, 1994, 144 с.
Страницы: 1, 2
|
|
|
© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент. |
|
|