Skip to content

Latest commit

 

History

76 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Библиотека lib_optics

lib_optics - библиотека для визуализации некоторых физических процессов, работая в приближении геометрической оптики. С помощью данной библиотеки возможна визуализация процессов отражения и преломления света на границе двух сред. Для этого используется закон снеллиуса, к тому же рассматривается явление полного внутреннего отражения. Также можно моделировать различные случаи "задачи с тонкой линзой" - построение изображения предмета в зависимости от его положения относительно тонкой линзы. В библиотеке имеется база данных, содержащая информацию о показателях преломления для многих сред. Кроме того, функционал lib_optics допускает настройку пользователем стилей построенных с ее помощью графиков и загрузку файлов для расширения базы новыми данными о показателях преломления сред.

Преломление света

1 Нахождение угла преломления

Углы указываются в граудсах

Информация о первой и второй среде указывается:

  • как строковое имя среды
  • либо числовой коэффициент преломления среды
r = RefractionLightClass()
# пример строкового параметра среды
medium_one = "water"
medium_two = "air"
angle = 40 
print(r.get_angle_refraction(angle, medium_one, medium_two))

# 58.935271735411426

Другие доступные среды и их коэффициенты указаны в файле: https://github.com/Korgutlova/lib_optics/blob/master/files/list_of_refractive_indices.csv

2 Построение хода лучей на графике

Случай преломления луча

r = RefractionLightClass()
medium_one = "water"
medium_two = "air"
angle = 40 
r.build_graph(angle, medium_one, medium_two)


Случай отражения луча

r = RefractionLightClass()
r.build_graph(50, 2, 1)

3 Загрузка пользовательского файла с коэффициентами преломления сред

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

  • первый параметр — строковое название среды
  • второй параметр — коэффициент преломления среды

Пример возможного файла .csv

air 1
water 1.3
lens 1.396
# в качестве параметра указывается путь к файлу 'my_file.csv' с коэффциентами
# путь может быть относительным или абсолютынм
r.set_refractive_indexes("my_file.csv")

4 Настройка стиля для графика преломления

График можно настраивать, указывая различные цвет для дуг, лучей, фона

r = RefractionLightClass()
# указание цвета "black" для падающего луча
r.graph.first_ray_color = "black"
# указание цвета "pink" для заливки второй среды
r.graph.second_medium_color = "pink"
# указание цвета "teal" для преломляющегося луча
r.graph.second_ray_color = "teal"
r.build_graph(35, 1.5, 2)

Построение изображений в тонких линзах

Библиотека предоставляет 2 класса линз:

  • BiconvexLens — двояковыпуклая собирательная линза
  • BiconcaveLens — двояковогнутая рассеивающая линза

Для создания объекта линзы нужно указать хотя бы 2 из трёх параметров:

  • dist_subject — расстояние от линзы до объекта
  • dist_image — расстояние от линзы до изображения
  • focal_length — фокусное расстояние линзы

Для проведения вычислений и построения графиков необходимо указать высоту объекта — height_subject.
Все остальные данные, а также график строятся на основании этих входных данных.

1 Действительный объект находится дальше фокусного расстояния собирательной линзы

x = BiconvexLens(dist_subject=15, focal_length=8, height_subject=5)
x.display_graphic()

2 Действительный объект находится внутри фокусного расстояния собирательной линзы

x = BiconvexLens(dist_subject=4, focal_length=5, height_subject=5)
x.display_graphic()

3 Действительный объект находится в фокусе собирательной линзы

x = BiconvexLens(dist_subject=10, focal_length=10, height_subject=5)
x.display_graphic()

4 Действительный объект находится дальше фокусного расстояния рассеивающей линзы

lens = BiconcaveLens(dist_subject=8, focal_length=5, height_subject=3)
print(lens.get__dist_image())
# 3.076923076923077
lens.display_graphic()

5 Точка находится дальше фокусного расстояния рассеивающей линзы

lens = BiconcaveLens(dist_subject=10, focal_length=5, height_subject=0)
lens.display_graphic()

6 Настройка стиля для отображения линзы и лучей

x = BiconvexLens(dist_subject=7, focal_length=10, height_subject=5)
# указание цвета "blue" для отметки фокусного расстояния
x.graph.focus_color = "blue"
# указание цвета "magenta" сокращенно "m" для объекта
x.graph.subject_color = "m"
# указание цвета "red" для изображения объекта
x.graph.image_color = "red"
x.display_graphic()

About

No description, website, or topics provided.

Resources

Stars

4 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages