![]() |
|||||
![]() ![]() |
|||||
![]() |
![]() |
![]() |
![]() |
![]() |
|
|
Лабораторная работа №6.
|
![]() |
Призма АР-0Отражательные призмы используют для изменения направления оси оптической
системы и оборачивания изображения в заданном направлении. Призма
АР-0 - равнобедренная призма с одной отражающей гранью. Выходящий
из призмы луч отклоняется на 0° относительно падающего. Исходной
величиной для расчета параметров призмы является диаметр входного
пучка |
Задача заключается в том, чтобы вычислить и отобразить ход любого луча через призму АР-0.
pr_ar0.pas
или prizm_ar0.zip
).Перед выполнением задания необходимо проанализировать работу программы-заготовки,
которая содержит подпрограммы отображения призмы АР-0 и произвольного
луча.
При рисовании начало координат находится в точке начала луча.
Необходимо организовать вычисление углов преломления и отражения произвольного луча на гранях призмы и отобразить ход луча.
Входными данными являются:
Краткий перечень необходимых действий для расчёта и отображения хода произвольного луча через призму АР-0 имеется в программе-заготовке.
Необходимо протестировать программу с различными входными данными.
В первую очередь необходимо определить систему координат на рисунке, а затем координаты всех вершин призмы в этой системе координат. Начало координат по оси X находится в крайней левой точке окна рисунка, а по оси Y - в середине окна. Для определения координат всех граней призмы можно использовать несколько параметров: x - координата крайней левой точки призмы, с - длина грани призмы и h - высота призмы.
![]() |
Параметры dx и dy вычисляются исходя из конфигурации призмы, в
данном случае они будут вычисляться следующим образом: Луч выходит из точки начала координат . Точку пересечения луча и первой грани призмы обозначим (x1, y1). |
Для нахождения точки пересечения луча и грани призмы можно воспользоваться уравнениями прямой. Уравнения прямой могут составлены исходя из разных начальных данных:
Уравнения прямой через две точки |
Уравнения прямой через точку и направление |
||
![]() |
![]() |
![]() |
![]() |
Уравнение грани удобнее всего составить как уравнение прямой через две точки, а уравнение луча - как уравнение прямой через точку и направление. Точку пересечения грани и луча можно найти из системы уравнений грани и луча. Если решить эти уравнения в общем виде, то результат будет следующим:
Теперь надо подставить координаты точек первой грани и первого луча в выражение для точки пересечения в общем виде:
![]() |
(x1, y1) заменяем на (x, -dy) В итоге получается выражение для вычисления координат точки пересечения
первой грани и луча: |
Чтобы вычислить угол, под которым идет луч после первой грани, необходимо:
|
![]() |
Рассмотрим теперь как записать нахождение точки встречи первого луча с первой гранью в тексте программы:
... ! описание дополнительных переменных var dx, dy, x0,y0,x1, y1, alfa,fi,fi_pr,PI : real; ... {------ необходимо добавить следующие действия: ----------------} PI:=3.14159; alfa:=PI/4.; dy:=prizm_h/2; dx:=prizm_h/tan(alfa); { первый отрезок луча} { вычисление точки (x1,y1) встречи луча с первой гранью} x1:=(-dy*dx-2*x*dy)/(tan(ray_fi)*dx-2*dy); y1:=tan(ray_fi)*x1; { рисование луча от предмета до первой грани} x0:=0; y0:=0; Draw_Ray(x0,y0,ray_fi,x1); { вычисление угла падения луча на первую грань (fi)} fi:=PI/2+ray_fi-alfa; { вычисление угла преломления луча на первой грани (fi_pr)} fi_pr:=asin(sin(fi)/prizm_n); { вычисление угла между лучом и осью (ray_fi)} ray_fi:=alfa+fi_pr-PI/2; ...
Все переменные, участвующие в вычислениях, необходимо определить как real.
Нахождение точки встречи с остальными гранями делается аналогично.