Смекни!
smekni.com

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

где
– некоторый скаляр, или:

или:

Так как длина оптического вектора равна показателю преломления среды (

,
), то из выражения и определения векторного произведения можно вывести классический закон преломления Снеллиуса.

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

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

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

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

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

Чтобы найти скаляр

, домножим скалярно выражение на вектор нормали
:

,

следовательно

,

где

Величина

имеет большое значение в математическом аппарате расчета лучей на компьютере.

4. ОПИСАНИЕ ПРОГРАММНОГО ПРОДУКТА

4.1. Описание структур данных

Исходные данные:

n– вещественное, хранит показатель преломления первой среды.

n1 – вещественное, хранит показатель преломления второй среды.

alpha – вещественное, хранит угол падения луча в градусах.

Результаты:

alpha1 – вещественное, хранит угол преломления луча.

Промежуточные данные:

radalpha – вещественное, хранит угол падения в радианах.

radalpha1 – вещественное, хранит угол преломления в радианах.

4.2. Описание процедур и функций


Рис.4.1. Схема взаимосвязей процедур и функций


Функции:

ReCalc (n: real; n1: real; alpha: real): real – возвращает угол преломления. n, n1 – показатели преломления, alpha – угол падения.

Menu(number: Integer): Integer – реализует работу с меню, возвращает выбранный пункт. number – предыдущий выбранный пункт меню.

ChangeN(flag: integer): real – возвращает новое значение показателя преломления. Если flag равен 1 – задается для первой среды, если 2 – для второй.

ChangeAl(n: real; n1: real; alpha: real): real – возвращает новое значение угла падения. n, n1 – показатели преломления, alpha – угол падения.

arcsin (x: real): real – возвращает арксинус аргумента x.

Процедуры:

MainCycle() – выполняет основной цикл программы.

GraphMode() – выполняет инициализацию графического режима.

Paint(n: real; n1: real; alpha: real) – отображает график, демонстрирующий преломление луча. n, n1 – показатели преломления, alpha – угол падения.

Recv() – выполняет вывод на экран реквизитов пользователя. Реквизиты хранятся в файле recv. txt.

SaveData(n: real; n1: real; alpha: real) – выполняет запись результатов в файл result. txt. n, n1 – показатели преломления, alpha – угол падения.

Info() – отображает на экран информацию о преломлении лучей.

LoadData(varn: real; varn1: real; varalpha: real) – выполняет загрузку данных из файла. n, n1 – показатели преломления, alpha – угол падения.

OutTextChangeAl() – выводит на экран вспомогательный текст при смене значения угла.

4.3. Описание функционирования

В основной программе выполняется единственная процедура MainCycle.

Перед основным циклом на экран выводятся реквизиты пользователя из файла "recv. txt". Затем выполняется установка входных данных по умолчанию, запись этих данных в файл, прорисовка графика и меню. Вызов меню выполняется в бесконечном цикле до тех пор, пока пользователь не выберет пункт "Выход". При выборе пункта "Информация" на экран будет выведена основная информация о преломлении света (процедура Info). При выборе пункта "Считать данные из файла" программа загрузит данные из файла "data. txt". При выборе пунктов "Изменить показатель преломления в 1-й среде", "Изменить показатель преломления во 2-й среде", "Изменить угол падения" можно менять соответствующие входные данные. При любом изменении данных результаты автоматически отображаются на графике и сохраняются в файл.

Рисунок 4.2. - Схема функционирования программы

4.4. Описание программных модулей

Я использовал в своей работе модули Graph и Crt (для работы с графическим и текстовым режимом соответственно).

Модуль Crtреализует работу в текстовом режиме. С помощью его процедур и функций можно проверять содержимое буфера клавиатуры и проверять код введенного символа.

Graphпозволяет работать с графическим режимом. С его помощью возможно отображение графических объектов. При помощи модуля Graph я выполнил прорисовку меню и графика.

5. КОМПЛЕКТ ПОСТАВКИ И ИНСТАЛЛЯЦИЯ

5.1 Комплект поставки

В комплект поставки программного продукта входят следующие файлы:

kursach. exe– файл, запускающий программу.

info. txt - файл, содержащий справочную информацию.

recv. txt – файл, содержащий реквизиты пользователя.

ПЗ. doc - пояснительная записка в формате doc.

bold. chr, euro. chr, goth. chr, lcom. chr, litt. chr, sans. chr, scri. chr, simp. chr, smal. chr, trip. chr, tscr. chr– кириллические шрифты.

egavga. bgi – графический драйвер.

5.2. Порядок инсталляции

Для установки программы необходимо скопировать жесткий диск файлы kursach. exe, info. txt, recv. txt, *. chr и egavga. bgi. При необходимости можно создать файл data. txt, содержащий входные данные.

6. ПРОВЕДЕНИЕ ТЕСТОВЫХ ИСПЫТАНИЙ

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

ВЫВОДЫ

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

Я разработал удобный интерфейс, функцию вывода графика, отображающего преломление лучей на границе двух сред. Также имеется возможность работы с разными преломляющими средами, и смены угла падения.

Приложение А

ТЕХНИЧЕСКОЕ ЗАДАНИЕ

А.1 Общие сведения

Полное название программного продукта: "Преломление света на границе раздела двух сред".

Плановый срок начала работы: 17.02.06

Плановый срок завершения работы: 5.06.06

А.2 Основание для разработки

Основанием для разработки является задание на курсовую работу по дисциплине "Программирование и алгоритмические языки", выданное кафедрой программного обеспечения интеллектуальных систем студенту группы СУА-О5 Паранчуку Станиславу.

А. З Цель работы

Цель разработки - создать программный продукт, который позволит демонстрировать преломление лучей на границе двух сред.