|
Posizione nel menu |
---|
Schizzo → Vincoli Sketcher → Vincolo di rifrazione (Legge di Snell) |
Ambiente |
Sketcher |
Avvio veloce |
K W |
Introdotto nella versione |
0.15 |
Vedere anche |
Nessuno |
Descrizione
Lo strumento Sketcher Vincolo di rifrazione vincola due linee a seguire la legge di rifrazione della luce mentre penetra attraverso un'interfaccia dove si incontrano due materiali con indici di rifrazione diversi. Vedere Legge di Snell.
Legge di Snell
Utilizzo
La sequenza dei clic è indicata da frecce gialle con numeri, n1 e n2 mostrano dove sono gli indici di rifrazione
- Preparare due linee per rappresentare un raggio di luce e un bordo che funga da interfaccia. Le linee dovrebbero trovarsi su lati diversi dell'interfaccia. L'interfaccia può essere una linea, un arco, una circonferenza o una conica.
- Selezionare un punto finale della prima linea, un punto finale della seconda linea e il bordo dell'interfaccia. Prendere nota dell'ordine di selezione dei punti finali.
- Esistono diversi modi per richiamare lo strumento:
- Selezionare l'opzione Schizzo → Vincoli Sketcher →
Vincolo di rifrazione (legge di Snell) dal menu.
- Usare la scorciatoia da tastiera: K quindi W.
- Selezionare l'opzione Schizzo → Vincoli Sketcher →
- Si apre la finestra di dialogo Vincolo di rifrazione.
- Inserire il Rapporto n2/n1. Dove n2 è per il supporto in cui risiede la seconda linea selezionata e n1 è per il supporto della prima linea.
- Viene aggiunto il vincolo della legge di Snell. Se richiesto, i punti finali vengono resi coincidenti e vincolati sull'interfaccia. Questi vincoli aggiuntivi sono chiamati vincoli di supporto.
Note
- L'attuale vincolo Legge di Snell usa l'equazione per un piano n1*sin(theta1) = n2*sin(theta2). I punti terminali devono essere resi coincidenti e posizionati sul'interfaccia usando altri vincoli, altrimenti il comportamento sarà indefinito. I vincoli di supporto necessari vengono aggiunti automaticamente in base alle correnti coordinate degli elementi.
- In Python i vincoli di supporto devono essere aggiunti manualmente (vedere Script).
- I vincoli di supporto possono essere eliminati temporaneamente per consentire di spostare i punti finali, questo può essere utile nel caso in cui si voglia realizzare un raggio riflesso o dei raggi birifrangenza.
- Diversamente dalla realtà, gli indici di rifrazione sono associati ai raggi di luce, ma non ai lati del contorno. Ciò è utile per emulare birifrangenza, costruire percorsi di diverse lunghezze d'onda dovuti alla rifrazione, e costruire facilmente l'angolo di insorgenza della riflessione interna totale.
- Entrambi i raggi possono essere sullo stesso lato dell'interfaccia, e soddisfare comunque l'equazione del vincolo. Questo è un non senso fisico, a meno che il rapporto n2 / n1 sia 1.0, nel qual caso il vincolo emula un riflesso.
- Come raggi sono accettati anche gli archi di cerchio e di ellisse. Ma questo è da considerarsi un non senso fisico.
Script
Il vincoli possono essere creati da macro e dalla console Python utilizzando il seguente comando:
Sketch.addConstraint(Sketcher.Constraint('SnellsLaw',line1,pointpos1,line2,pointpos2,interface,n2byn1))
dove:
Sketch
è un oggetto schizzoline1
epointpos1
sono due numeri interi che identificano il punto finale della linea nel mezzo con indice di rifrazione n1.line1
è l'indice della linea nello schizzo (il valore restituito da Sketch.addGeometry) epointpos1
dovrebbe essere 1 per il punto iniziale e 2 per il punto finale.line2
epointpos2
sono gli indici che specificano il punto finale della seconda linea (nel mezzo n2)interface
è l'indice che specifica la linea che indica la posizione dell'interfaccia tra il mezzo n1 e il mezzo n2n2byn1
è un numero in virgola mobile uguale al rapporto degli indici di rifrazione n2/n1
La pagina Sketcher scripting spiega i valori che possono essere utilizzati per line1
, pointpos1
, line2
, pointpos2
e interface
e contiene ulteriori esempi su come creare vincoli da script Python.
Esempio:
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()
Questa pagina è recuperata da https://wiki.freecad.org/Sketcher_ConstrainSnellsLaw