lib_optics - библиотека для визуализации некоторых физических процессов, работая в приближении геометрической оптики. С помощью данной библиотеки возможна визуализация процессов отражения и преломления света на границе двух сред. Для этого используется закон снеллиуса, к тому же рассматривается явление полного внутреннего отражения. Также можно моделировать различные случаи "задачи с тонкой линзой" - построение изображения предмета в зависимости от его положения относительно тонкой линзы. В библиотеке имеется база данных, содержащая информацию о показателях преломления для многих сред. Кроме того, функционал lib_optics допускает настройку пользователем стилей построенных с ее помощью графиков и загрузку файлов для расширения базы новыми данными о показателях преломления сред.
Углы указываются в граудсах
Информация о первой и второй среде указывается:
- как строковое имя среды
- либо числовой коэффициент преломления среды
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
Случай преломления луча
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)Пользовательский файл не должен содержать заголовков и должен содержать данные в следующем формате:
- первый параметр — строковое название среды
- второй параметр — коэффициент преломления среды
Пример возможного файла .csv
| air | 1 |
| water | 1.3 |
| lens | 1.396 |
# в качестве параметра указывается путь к файлу 'my_file.csv' с коэффциентами
# путь может быть относительным или абсолютынм
r.set_refractive_indexes("my_file.csv")График можно настраивать, указывая различные цвет для дуг, лучей, фона
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.
Все остальные данные, а также график строятся на основании этих входных данных.
x = BiconvexLens(dist_subject=15, focal_length=8, height_subject=5)
x.display_graphic()x = BiconvexLens(dist_subject=4, focal_length=5, height_subject=5)
x.display_graphic()x = BiconvexLens(dist_subject=10, focal_length=10, height_subject=5)
x.display_graphic()lens = BiconcaveLens(dist_subject=8, focal_length=5, height_subject=3)
print(lens.get__dist_image())
# 3.076923076923077
lens.display_graphic()lens = BiconcaveLens(dist_subject=10, focal_length=5, height_subject=0)
lens.display_graphic()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()







