Szkicownik: Wiązanie prawo Snell'a

From FreeCAD Documentation
This page is a translated version of the page Sketcher ConstrainSnellsLaw and the translation is 59% complete.
Outdated translations are marked like this.

Szkicownik: Wiązanie prawo Snella

Lokalizacja w menu
Szkic → Wiązania szkicownika → Wiązanie refrakcji (prawo Snell'a)
Środowisko pracy
Szkicownik
Domyślny skrót
K W
Wprowadzono w wersji
0.15
Zobacz także
brak

Opis

Powoduje związanie dwóch linii do przestrzegania prawa załamania światła, które przenika przez powierzchnię, gdzie spotykają się dwa materiały o różnych współczynnikach załamania. Zobacz Prawo Snell'a na Wikipedii, aby uzyskać więcej informacji.

Prawo Snell'a

Użycie

Sekwencja kliknięć jest oznaczona żółtymi strzałkami z numerami. n1, n2 to tylko etykiety, wskazujące gdzie znajdują się wskaźniki załamania.

  • Będziesz potrzebował dwóch linii, które mają podążać za promieniem światła, oraz krzywej, która będzie działać jako powierzchnia kontaktowa. Linie te powinny znajdować się po różnych stronach tej powierzchni.
  • Wybierz punkt końcowy jednej linii, punkt końcowy drugiej linii i krawędź powierzchni kontaktowej. Powierzchnia kontaktu może być linią, łukiem, okręgiem lub stożkiem. Zwróć uwagę na kolejność, w jakiej wybrałeś punkty końcowe.
  • Wywołaj wiązanie. Pojawi się okno dialogowe z zapytaniem o stosunek indeksów załamania n2/n1. n2 odpowiada środkowi, w którym znajduje się druga wybrana linia punktu końcowego, n1 jest dla pierwszej linii.
  • Punkty końcowe będą zbieżne (jeśli trzeba), zostaną związane z powierzchnią kontaktu (jeśli trzeba), a prawo Snell'a zostanie związane.

Notes

  • Rzeczywiste wiązanie prawna Snell'a narzuca równanie prawa jawnego n1*sin(theta1) = n2*sin(theta2). Wymaga, aby końce linii były zbieżne i umieszczone bezpośrednio na powierzchni styku różnych wiązań. Niezbędne wiązania pomocnicze są dodawane automatycznie w oparciu o bieżące współrzędne elementów.
  • Procedura Pythona nie dodaje wiązań pomocniczych. Muszą one być dodane ręcznie przez skrypt (zobacz przykład w sekcji Tworzenie skryptów).
  • Te wiązania pomocnicze mogą być tymczasowo usunięte, a punkty końcowe przeciągnięte, co może być użyteczne w przypadku, gdy chcemy skonstruować odbity promień lub promienie dwójłomne.
  • W przeciwieństwie do rzeczywistości, współczynniki załamania są powiązane z promieniami światła, ale nie zgodnie z krawędzią granicy. Jest to użyteczne w celu emulowania dwupłaszczyzn, konstruowania ścieżek o różnych długościach fal spowodowanych załamaniem i łatwego konstruowania kąta początku całkowitego wewnętrznego odbicia.
  • Oba promienie mogą znajdować się po tej samej stronie powierzchni styku, spełniając równanie wiązania. Jest to fizyczny nonsens, chyba że stosunek n2/n1 wynosi 1,0, w którym to przypadku ograniczenie emuluje odbicie.
  • Łuki okręgu i elipsy są również akceptowane jako promienie (fizyczny nonsens).

Tworzenie skryptów

Wiązanie może być utworzone przez makropolecenie i z konsoli Pyton za pomocą następującej funkcji:

Sketch.addConstraint(Sketcher.Constraint('SnellsLaw',line1,pointpos1,line2,pointpos2,interface,n2byn1))

gdzie:

  • Sketch jest obiektem typu szkic
  • line1 oraz pointpos1 są dwiema liczbami całkowitymi określającymi punkt końcowy linii w środku o współczynniku załamania światła wynoszącym n1. line1 jest indeksem linii w szkicu (wartość zwracana przez Sketch.addGeometry), a pointpos1 powinno wynosić 1 dla punktu początkowego i 2 dla punktu końcowego,
  • line2 oraz pointpos2 to indeksy określające punkt końcowy drugiej linii (w środku „n2”),
  • n2byn1 jest liczbą zmiennoprzecinkową równą stosunkowi współczynników załamania światła n2/n1.

Strona Skrypty szkicownika wyjaśnia wartości, których można użyć dla line1, pointpos1, line2, pointpos2 and interface oraz zawiera dalsze przykłady tworzenia wiązań przy użyciu skryptów języka Python.

Przykład:

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()