Програма яка зображає хід променя в оптичному прозорому середовищі

Курсова робота



На тему:



"Програма, яка зображає хід променя в оптичному прозорому середовищі"





















Херсон 2009


Анотація



1. Постановка задачі. – В даному розділі описуються можливі варіанти і перспективи використання моделювання фізичних процесів за допомогою комп'ютерного моделювання.

2. Математична модель. – Описуються вхідні дані програми, очікувані результати, математичні формули та фізичні процеси.

3. Описання алгоритму. – Приводиться повне словесне описання розробленого алгоритм вирішення задачі по крокам і під алгоритмам.

4. Описання програми. – Аналіз мов програмування. Описання стандартних функцій і процедур. Описання реалізації інтерфейсу користувача. Інструкції для користувача програми.

5. Висновок. – Які результати зробленої під час виконання курсового проекту роботи, що нового засвоєно.

Програма створена в середовищі програмування Turbo Pascal 7.0, яка працює під управлінням операційних систем DOS або сімейства Windows.






Вступ



Стратегія швидкого розвитку та підвищення темпів науково-технічного прогресу визначає в якості каталізуючої умови необхідність широкого впровадження та застосування ЕОМ в різних сферах науки, техніки та економіки. Широкий спектр сучасних заходів обчислювальної техніки від керуючих мікроЕОМ і ПЕОМ до великомасштабних інформаційно-обчислювальних сіток, необхідність їх ефективного використання для рішення науково-технічних, проектних і економічних задач пред‘являють високі вимоги грамотності.

Однією з таких мов програмування є Turbo Pascal.

Мова Pascal була створена швейцарським професором Ніклаусом Віртом наприкінці 60-х – на початку 70-х років і названа на честь видатного французького математика і філософа Блеза Паскаля. Спочатку ця мова була створена для вивчення програмування, однак завдяки великим можливостям структурного програмування вона стала широко застосовуватися в різних галузях: науці, техніці, економіці, інформаційних системах тощо. Pascal є першою серйозною мовою з якою знайомляться майбутні програмісти.

Під час введення програми та її редагування ви можете застосувати навички роботи в текстовому редакторі. Текст можна набирати в режимі вставки і заміни.

У Pascal програма повинна мати певну структуру. За заголовком іде розділ uses, у якому зазначаються бібліотечні модулі, що підключаються.

Наступними розділами програми на Pascal є описи міток, констант, типів даних та змінних. Якщо в програмі створені процедури і функції, то вони будуть наведені в розділі описів.

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

Не всі названі розділи обов'язково мають бути присутніми у програмі. У простих програмах можуть бути лише заголовок, опис змінних і розділ операторів. Взагалі будь-який розділ, крім розділу операторів, може бути відсутнім у програмі.

Трансляція програми на Pascal здійснюється за допомогою компілятора, який входить до складу системи Turbo Pascal. У ході компіляції можуть виводитися повідомлення про помилки. Помилкою є будь-яке відхилення від синтаксису мови Pascal.






1. Постановка задачі



Темою моєї курсової роботи є «Оптичне прозоре середовище складається з n-анізотропних шарів з різними показниками переломлення. Промінь світла падає на верхній шар під кутом . Зобразити хід променя в середовищі».

Мета курсової роботи полягає в тому, щоб за допомогою комп’ютерного моделювання зобразити кут заломлення променя в оптичному середовищі, яке складається з n-анізотропних шарів.



2. Математична модель



При проходженні світла через межу двох прозорих середовищ падаючий промінь розділяється на два: відбитий і заломлений. Напрям цих променів визначається законами відбиття і заломлення світла.

Закон заломлення формулюється наступним чином: переломлений промінь лежить в одній площині з падаючим променем і нормаллю відновлений в точці падіння. Відношення синуса кута падіння до синуса кута заломлення є величина постійна для даних величин:







Величина n12 називається відносним показником заломлення другої речовини до першої.

Використавши відношення закону переломлення можна надати вигляду:






З цієї формули видно, що при переході світла з більш щільного середовища в оптично менш щільну промінь віддаляється від нормалі до поверхні. Збільшення кута падіння і1 супроводжується більш швидким ростом кута падіння і2 і по досягненні кутом і1 значення:



Іпред=arcsin n12



Кут падіння стає рівним п\2.

Величина Іпред називається граничним кутом.

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





k1

k2

α1





α2



O1

O2

∆x



Після вводу всіх даних програма починає вираховувати всі кути, і координати точок, через які проходить промінь.

Спочатку промінь падає з верхньої точки екрану з координатами (320,0) т.О1. Для знаходження кожної іксової координати точки Оn, використовується формула:



Xn=Xn-1 +∆X;




Де ∆X різниця в одиницях на осі Х між точками Оn і On-1.



∆X=50*cos(αn)/(sin(αn)+0.0000000001);



В останній формулі до sin(αn) додається число 0.0000000001, це робиться для того, щоб при вводі αn=90 уникнути ділення на нуль, так як число дуже маленьке воно не вплине на кінцевий результат. ∆Y=50;

Де ∆Y – різниця на осі Y між точками Оn і On-1, так як поверхності розміщені на однаковій відстані ∆Y= const.

Кожний наступний кут знаходиться за формулою:



αn = π/2 – arcsin (sin(π/2 – αn-1)*kn-1/kn)



Функція arcsin описана в вихідному тексті програми.

Таким чином необхідно побудувати ланцюжка ліній, для проведення кожної із них необхідно вирахувати координати точок, через які будуть вони проведенні.



Описання змінних

Найменування величини

Ідентифікатор

Тип

Коментар

Кількість шарів

n

Integer

Вхідний тип

Кут заломлення

A[i]

Real

Вхідний тип

Показник переломлення

A1

Real

Вхідний тип

Ініціалізація графічного режиму

Gd, gm

Integer

Вхідний тип



3. Описання алгоритму



Головна програма

Крок 0: Процедура вводу inp;

Крок 1: Процедура розрахунку даних raz4et;

Крок 2: Процедура ініціалізації графіки prepare;

Крок 3: Процедура виводу шарів Lines;

Крок 4: Процедура виводу кута Out;

Описання процедури inp:

Крок 0: Ввід кількості шарів;

Крок 1: Ввід кута падення променя;

Крок 2: Цикл «for» i від 1 до n:

Крок 3: Вводимо i-й коефіц. заломлення

Описання процедури raz4et:

Крок 0: Ініціюємо початкову точку випромінення променя;

Крок 2: Переводимо кут падіння з градусів в радіани;

Крок 3: Розраховуємо різницю координат по іксу;

Крок 4: Знаходимо іксову координату першої точки заломлення;

Крок 5: Задаемо ігрикову координату першої точки заломлення

Крок 6: Цикл «for» i від 1 до n:

Крок 7: Розраховуємо кут заломлення;

Крок 8: Розраховуємо різницю координат по іксу;

Крок 9: Знаходимо іксову координату i-й точки заломлення;

Крок 10: Розраховуємо ігрикову координату i-й точки заломлення;

Описання процедури Prepare:

Крок 0: Присвоюємо змінній «а» значення поточного відеорежиму;

Крок 1: Ініціюємо графіку в Паскале;

Описання процедури Lines:

Крок 0: Змінюємо поточний колір на червоний;

Крок 1: Цикл «for» i від 1 до n:

Крок 2: Проводимо лінію (round (d*i), 0, round (d*i), getmaxy);

Описання процедури Out;

Крок 0: Цикл «for» i від 0 до n:

Крок 1: Змінюємо поточний колір на білий;

Крок 2: Проводимо промінь;

Крок 3: Переводимо розмір кута із радіанів в градуси для виводу;

Крок 4: Змінюємо поточний колір на світло-сірий;

Крок 5: Виводимо текст біля точки заломлення, де текст – розмір кута;



4. Описання програми



На даний момент ми знаємо дві мови програмування, це С і Pascal. Для вибору мови зрівнюємо його по наступним критеріям.

Простота мови програмування напряму залежить від кількості елементарних конструкцій. Зрозуміло, що програміст, який має справу з більш поширеними мовами програмування прагне вивчити лише її підмножину, часто не усвідомлюючи зниження ефективності власних програм через не оптимальне використання засобів мови. Простота мови напряму впливає на зрозумілість програми так як використання різних підмножин мов автором читачем еквівалентному частковій або повній незрозумілості. Другим фактором, який знижує простоту мови програмування є різноманітність властивостей, так як наявність деяких способів здійснення деякої дії. З цієї точки зору Pascal більш вигідний, ніж С, в якій програміст може додати одиницю чотирма різними способами:

count=count+1;

count+=1;

count++;

++count.

Третьою потенційною проблемою простоти є пере загрузка операторів, так як наявність у символу, який позначає оператор, декількох значень. Але для стандартів Pascal і ANSI C ця проблема не виникає.

Ортогональність мови програмування значить, що оператори, які керують і структури даних мови можна виразити за допомогою відносно невеликої кількості елементарних конструкцій, які користуються обмеженим числом доступів. Назва «ортогональність» виникла від математичного поняття ортогональних незалежних векторів. Ортогональність виникає із симетрії відношення між елементарними елементами.

Ортогональність тісно пов'язана з простотою, чим більш ортогональною є структура мови, тим менше винятків із правил. Менше виключень – це означає, що мова більш систематична, її легко вивчати і не треба йти на компроміси, сто «виключень із правил, підтверджує правило».

Мова С містить дві різновидності структур даних: масиви і записи, при цьому записи можуть повертатися функціями, а масиви ні. Членом структури може бути змінна будь-якого типу, за виключенням змінної типу void, і структури того же типу. При цьому елемент може мати бути будь-який тип, за виключенням типу void, і крім того вони не можуть бути функціями. Ще один приклад не ортогальності: параметри передаються по значенню, якщо вони не є масивами, оскільки ім'я масиву без індексу інтерпретується в програмах на мові С, як адреса першого елементу масиву. В контексті ортогональності мова Pascal безумовно більш послідовна.

Легкість створення програм характеризує зручність мови для створення програм в вибраній області. Характеристики легкості створення програм і читабельність мови часто співпадають, що пояснюється тим, що в процесі створення програми авторам часто доводиться звертатися до написаного коду. Тут як і при оцінці читабельності мови, порівняння потрібно проводити в контексті конкретної області застосування мови. Не секрет, що мова Pascal створювалася Віртом, як навчальна, а мова С спочатку проектувався для системного програмування. З іншої сторони мова С не зовсім зручна для початку вивчення програмування, що, як уже було сказано, викликано його неортогональністю, і як буде показано далі, нестрогістю типізації, що не сприяє появі гарного, стабільного стилю програмування при навчанні. Хоча при наявності досвідних викладачів останній пункт стає надто обґрунтованим.

Я вважаю, що саме мова Pascal більше підходить для виконання моєї курсової роботи, так як він більш простий і зрозуміліший, ніж С.

Підпрограма може бути розроблена для різних випадків використання. Перед викликом підпрограми за допомогою параметрів її надають конкуренту інформацію для виконання саме тих дій, які треба виконати.

Структура підпрограми повторяє структуру Pascal – програми. Інтерфейс її програми міститься в її заголовку. Описання локальних об'єктів і операторів підпрограми складають внутрішню його частину і мають синтаксис блоку.

Підпрограма в мові програмування Pascal розділяються на два види: функції і процедури. Хоча вони мають одне і те же значення і аналогічну структуру, процедури і функції розрізняються призначенням і способом їх використання. Процедури слугують для завдання сукупності дій, направлених на зміну зовнішньої по відношенні до них програмного стану. Суть функцій складається в першу чергу в тому, щоб визначити алгоритм вирахування нового значення деякого типу.

В заголовку підпрограми може бути вказаних список формальних параметрів. При визові підпрограми замість них вказують список фактичних параметрів. Між ними повинно виконуватися відповідність типів.

Параметри підпрограми в мові Pascal мають три способи їх задачі:

Параметри-значення;

Параметри-змінні;

Параметри, які не мають типу.

При позначенні параметрів-значень вказується тип параметрів. При визові підпрограми в області пам'яті, яка виділяється для локальних даних і формальних параметрів, використовується копіювання значень фактичних параметрів в область, яка відповідає формальним параметрам. Під час роботи підпрограми зміни значень формальних параметрів не впливає на склад клітинок пам'яті фактичних параметрів. При закінченні роботи підпрограми пам'ять, яка виділяється під формальні параметри і локальні даності, звільнюється, значення формальних параметрів втрачається.

При описанні параметрів-змінних відноситься службове слово var, після списку параметрів слідує описання типу. При визові підпрограми в області пам'яті, яка виділяється для локальних даних і формальних параметрів, виконується копіювання адрес фактичних параметрів в область, яка відповідає формальним параметрам. Під час роботи підпрограми зміни значень формальних параметрів прямо через адресу впливає на склад клітинок пам'яті фактичних параметрів. При закінченні роботи підпрограми пам'ять, яка виділяється під формальні параметри і локальні дані, звільнюється, а результат відразу отримуємо в відповідній області фактичних параметрів.

ФУНКЦІЇ. Функцією називають підпрограму, в результаті виконання якої вимірюється тільки одне значення. Функція описується в розділі описання Pascal – програми таким чином:

Functіon ім'я функції (список форм. параметрів:тип фор. пар.)

Тип функції;

Розділ описання функції;

Begіn

Розділ операторів функції

end;

Масиви – це сукупність значень однакового типу.

Кожне з значень, з яких складається масив, мають назву його компонента або елемента.

Масив даних в програмі розглядається як змінна структурованого регулярного типу (така, що складається із завідомо заданого кінцевої кількості елементів). Масиву присвоюється ім'я, за допомогою якого можна вказувати як на масив в цілому, так і на будь-який його елемент.

Щоб вказати в програмі на елемент масиву, треба крім імені масиву вказати індекс елементу, який в найпростішому випадку рівняється порядковому номеру цього елементу в масиві.

Кількість елементів при описі масиву через вказування інтервалу можливих значень індексу його елементів, і не змінюється в процесі роботи програми. Для вказування на елемент одномірних масивів використовується один індекс. Матриця служить прикладом двомірного масиву даних, для вказування на кожний елемент якого необхідно вказати два індекси: номер рядка і номер стовбцю. В програмах при записі розмірності двомірного масиву в дужках вказують межі можливих змін кожного з двох індексів а [1..2; 1…4]. Елементи двомірного масиву, який доповнюється двома індексами, які вказуються в дужках і розділені комою.

Для роботи з графікою в середовищі Turbo Pascal 7.0 використовується модуль Graph.tpu, в ньому представлено множина процедур і функцій для використання в додатках. В моїй програмі використовувались наступні процедури і функції для роботи з графікою:

Function detect – визначає режим роботи відеоадаптера;

Procedure InitGraph – процедура ініціалізації процедур в Pascal, дана процедура підключає зовнішній відео драйвер і переключає відеоадаптер в графічний режим;

Procedure CloseGraph – процедура переключає відеоадаптер в текстовий режим і очищає екран;

Procedure line – процедура малювання прямої лінії;

Procedure OutTextXY – процедура виводу тексту на екран в графічному режимі.

Procedure SetColor – процедура задання поточного кольору

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

Введіть кількість шарів

(Користувачу необхідно ввести кількість шарів, через які буде проходити промінь)

Введіть показник заломлення (>0) шар N;

(Для кожного середовища необхідно ввести показник заломлення для вирахування інших кутів)

Введіть кут падіння в діапазоні від 0 до 90 градусів;

(Необхідно ввести значення кута, під яким кут спочатку буде падати на першу площину. Необхідно враховувати, що для відображення всієї траєкторії не варто вводити сильно велике, або сильно маленьке значення кута)

Всі вище перераховані запроси очікують числову відповідь: для кількості запитів – в форматі integer, а для всіх останніх – float.

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

Мінімальна конфігурація комп'ютера:

Процесор – Celeron, Pentium с частотою 133 МГц і більше.;

Оперативна пам'ять (ОЗУ) – 1 Мб і більше;

Пам'ять відеоадаптера – 512 Кб і більше;

Операційна система DOS або Windows 95\98\ХР;

Floppy-дисковід, або CD-ROM.

Для початку роботи з програмою необхідно запустити файл «anizotrop.exe» подвійним кліком мишки або виділити файл, після чого натиснути Enter. Перед вами з» явиться повно екранне вікно.

Слідуючи вказівкам програми, ви повинні ввести всі дані, які необхідні для її роботи. Дані, які необхідно ввести: кількість шарів, кут падіння променя (0° -90°), коефіцієнти для кожного середовища.

Після того, як ви введете всі дані програма покаже необхідні розрахунки і видасть результат. Для повернення на початок роботи натисніть клавішу q.

Для виходу із програми натисніть будь-яку клавішу, або натисніть клавішу Esc в головному меню.

Зауваження: для правильного функціонування програми драйвери для роботи з графічним відео режимом повинна знаходитися в папці «C:\BGI\», або безпосередньо в папці з виконуваною програмою «anizotrop.exe».






Висновок



Під час виконання курсової роботи я навчилася працювати з графікою в середовищі Turbo Pascal 7.0, удосконалила навики роботи з складними циклами, з масивами, користувальницькими процедурами. Також я навчилася застосовувати теоретичні знання з алгебри, геометрії і фізики для практичного користування.

За час курсового проекту мною був створений складний програмний модуль, який складається з множини додаткових функцій і процедур, створених для спрощення розуміння і написання програми, який працює з зовнішніми драйверами, і в якому використовується робота з графікою. Але я вважаю, що у цієї програми ще є перспективи розвитку, зокрема необхідно удосконалити графічне оформлення.

Виконуючи курсову роботу, я особисто зацікавилася в роботі з графікою в Turbo Pascal, і планую продовжувати вивчати її можливості.






Список літератури



Проценко В.С. та ін. Техніка програмування мовою С. Навчальний посібник-К. Либідь, 1993

А. Епанешников, В. Епанешников Программирование в среде Turbo Pascal 7.0-М.: Диалог-МИФИ, 1993.

Марченко А.И., Марченко Л.И. Программирование в среде Turbo-Pascal 7.0-М. Бином Универсал, К.:Юниор, 1997

А.Б. Ставровский Турбо Паскаль 7.0. Учебник. – К.: Издательская группа BHV, 2000

Turbo Pascal/ С.А. Немнюгин. – СПб: Издательство «Питер», 2001.

Фигурнов В.Э. IBM PC для пользователя. – М.: Инфра-М, 2000, 480 стр.

Методичні вказівки до проведення лабораторних занять з основ програмування та алгоритмічних мов. Частина 1, Нога Л.В., Сидорук М.В. Херсон, 2003.

Методичні вказівки до проведення лабораторних занять з основ програмування та алгоритмічних мов. Частина 2. Нога Л.В., Сидорук М.В. Херсон, 2003

Фаронов В.В. TurboPascal 7.0. Навчальний курс. – М.: Коледж, 1997.