|
Расположение в меню |
---|
Эскиз → Ограничения эскиза → Ограничение преломления (Закон Снеллиуса) |
Верстаки |
Скетчер |
Быстрые клавиши |
K W |
Представлено в версии |
0.15 |
См. также |
Нет |
Описание
Инструмент Ограничение преломления (Закон Снеллиуса) ограничивает две линии, чтобы они следовали закону преломления света, когда он проникает через границу раздела двух материалов с разными показателями преломления. Смотри Закон Снеллиуса (англ.), (рус.)
Закон Снеллиуса
Применение
Последовательность щелчков обозначена жёлтыми стрелками с цифрами, n1 и n2 показывают, где находятся показатели преломления
- Подготовьте две линии, которые будут представлять луч света, и ребро, которое будет служить границей раздела. Линии должны находиться по разные стороны от границы раздела. В качестве границы раздела могут выступать Линия, Дуга, Окружность или круговым ребром.
- Выберите конечную точку первой линии, конечную точку второй линии и ребро раздела. Обратите внимание на порядок выбора конечных точек.
- Есть несколько способов вызвать инструмент:
- Выберите в меню Эскиз → Ограничения эскиза →
Ограничение преломления (Закон Снеллиуса).
- Используйте сочетание клавиш: нажмите K затем сразу нажмите W.
- Выберите в меню Эскиз → Ограничения эскиза →
- Откроется диалоговое окно Отношение показателей преломления.
- Введите Отношение n2/n1. Где n2 - среда, в которой находится вторая выбранная линия, а n1 - среда в которой находится первая линия.
- Добавлено ограничение по закону Снеллиуса. При необходимости конечные точки делаются совпадающими и ограничиваются на поверхности раздела. Эти дополнительные ограничения называются вспомогательные ограничения.
Примечания
- Фактическое ограничение закона Снеллиуса приводит к выполнению уравнения n1*sin(theta1) = n2*sin(theta2). Для этого необходимо, чтобы концы линий совпадали и находились на границе раздела с помощью других ограничений, иначе поведение будет неопределённым. Необходимые вспомогательные ограничения будут добавлены автоматически на основе текущих координат элементов.
- В Python вспомогательные ограничения должны быть добавлены вручную (смотри Написание скриптов).
- Эти вспомогательные ограничения можно временно удалять, а конечные точки перетаскивать друг относительно друга, что может быть полезно, если нужно построить отражённый луч или лучи двойного преломления.
- В отличие от реальности, показатели преломления связаны с лучами света, а не со сторонами границы раздела сред. Это полезно для эмуляции двухлучевого преломления, построения путей с разными длинами волн из-за преломления и легкого построения угла начала полного внутреннего отражения.
- Оба луча могут находиться по одну сторону границы раздела, удовлетворяя уравнению ограничения. Это физическая бессмыслица, если только отношение n2/n1 не равно 1,0, в этом случае ограничение эмулирует отражение.
- Дуги окружности и эллипса также принимаются за лучи. Но это тоже физическая бессмыслица.
Написание скриптов
Ограничения можно создавать с помощью макросов и в консоли Python, используя следующие команды:
Sketch.addConstraint(Sketcher.Constraint('SnellsLaw',line1,pointpos1,line2,pointpos2,interface,n2byn1))
где:
Sketch
- объект эскиза.line1
иpointpos1
- два целых числа, определяющие конечную точку линии в среде с показателем преломления n1.line1
- это индекс линии в эскизе (значение, возвращаемое Sketch.addGeometry), аpointpos1
должен быть равен 1 для начальной точки и 2 для конечной.line2
иpointpos2
- это индексы, определяющие конечную точку второй линии (в среде n2)interface
- индекс, указывающий на линию, обозначающую позицию границы между средой n1 и средой n2n2byn1
- число с плавающей точкой, равное отношению показателей преломления n2/n1
На странице Написание скриптов в Скетчер объясняются значения, которые можно использовать для line1
, pointpos1
, line2
, pointpos2
и interface
, а также приводятся дополнительные примеры создания ограничений из скриптов Python.
Пример:
import Sketcher
import Part
import FreeCAD
StartPoint = 1
EndPoint = 2
f = App.activeDocument().addObject("Sketcher::SketchObject","Sketch")
# add geometry to the sketch
icir = f.addGeometry(Part.Circle(App.Vector(-547.612366,227.479736,0),App.Vector(0,0,1),68.161979))
iline1 = f.addGeometry(Part.LineSegment(App.Vector(-667.331726,244.127090,0),App.Vector(-604.284241,269.275238,0)))
iline2 = f.addGeometry(Part.LineSegment(App.Vector(-604.284241,269.275238,0),App.Vector(-490.940491,256.878265,0)))
# add constraints
# helper constraints:
f.addConstraint(Sketcher.Constraint('Coincident',iline1,EndPoint,iline2,StartPoint))
f.addConstraint(Sketcher.Constraint('PointOnObject',iline1,EndPoint,icir))
# the Snell's law:
f.addConstraint(Sketcher.Constraint('SnellsLaw',iline1,EndPoint,iline2,StartPoint,icir,1.47))
App.ActiveDocument.recompute()
Эта страница получена от https://wiki.freecad.org/Sketcher_ConstrainSnellsLaw