Sketcher ConstrainSnellsLaw/fr: Difference between revisions

From FreeCAD Documentation
No edit summary
No edit summary
(One intermediate revision by the same user not shown)
Line 32: Line 32:
{{Caption|La séquence des clics est indiquée par des flèches jaunes avec des nombres, n1 et n2 indiquent où les indices de réfraction se trouvent.}}
{{Caption|La séquence des clics est indiquée par des flèches jaunes avec des nombres, n1 et n2 indiquent où les indices de réfraction se trouvent.}}


# Préparez deux lignes pour représenter un faisceau de lumière et une arête pour servir d'interface. Les lignes doivent être situées de part et d'autre de l'interface. L'interface peut être une [[Sketcher_CreateLine/fr|ligne]], un [[Sketcher_CompCreateArc/fr|arc]], un [[Sketcher_CompCreateCircle/fr|cercle]] ou un [[Sketcher_CompCreateConic/fr|conique]]
<div class="mw-translate-fuzzy">
# Sélectionnez une extrémité de la première ligne, une extrémité de la deuxième ligne et l'arête de l'interface. Notez l'ordre de sélection des extrémités.
* Vous aurez besoin de deux lignes qui vont suivre un faisceau de lumière, et une courbe pour agir comme une interface. Les lignes doivent être sur des côtés différents de l'interface.
# Il y a plusieurs façons de lancer l'outil :
* Sélectionnez l'extrémité d'une ligne, un point d'extrémité d'une autre ligne, et le bord de l'interface. L'interface peut être une [[Sketcher_CreateLine/fr|ligne]], un [[Sketcher_CompCreateArc/fr|arc]], un [[Sketcher_CompCreateCircle/fr|cercle]] ou un [[Sketcher_CompCreateConic/fr|conique]]
#* Sélectionnez l'outil {{MenuCommand|Esquisse → Contraintes de l'esquisse → [[Image:Sketcher_ConstrainSnellsLaw.svg|16px]] Contrainte de réfraction (loi de Snell)}} du menu.
* Lancez la contrainte. Une boîte de dialogue apparaît pour demander un rapport d'indices de réfraction n2/n1. n2 correspond au milieu où la ligne du deuxième critère sélectionné réside, n1 est pour la première ligne.
#* Utilisez le raccourci clavier : {{KEY|K}} puis {{KEY|W}}.
* Les critères d'évaluation seront mis en coïncidence (si nécessaire), contraint à l'interface (si nécessaire), et la loi de Snell deviendront contraint.
# La boîte de dialogue {{Commande de menu|Rapport d'indice de réfraction}} s'ouvre.
</div>
# Saisissez le {{MenuCommand|Rapport n2/n1}}, où {{MenuCommand|n2}} correspond au milieu où se trouve la deuxième ligne sélectionnée et {{MenuCommand|n1}} correspond au milieu de la première ligne.
# Une contrainte de la loi de Snell est ajoutée. Si nécessaire, les extrémités sont rendues [[Sketcher_ConstrainCoincident/fr|coïncidentes]] et contraintes [[Sketcher_ConstrainPointOnObject/fr|sur l'interface]]. Ces contraintes supplémentaires sont appelées [[Sketcher_helper_constraint/fr|contraintes d'aide]].


==Notes==
<span id="Notes"></span>
==Remarques==


* La contrainte de la loi de Snell applique l'équation de la loi simple n1*sin(theta1) = n2*sin(theta2). Elle a besoin que les extrémités des lignes coïncident et soient sur l'interface par d'autres contraintes, sinon le comportement n'est pas défini. Les contraintes d'aide nécessaires sont ajoutées automatiquement en fonction des coordonnées actuelles des éléments.
<div class="mw-translate-fuzzy">
* En Python, les contraintes d'aide doivent être ajoutées manuellement (voir [[#Script|Script]]).
* La contrainte actuelle de la loi de Snell applique la plaine équation de la loi n1*sin(theta1) = n2*sin(theta2). Il a besoin que les extrémités des lignes soient confondues et sur l'interface par d'autres contraintes. Les contraintes auxiliaires nécessaires sont ajoutées automatiquement en fonction des coordonnées actuelles des éléments.
* Ces contraintes peuvent être temporairement supprimées et les extrémités déplacées, ce qui peut être utile si l'on veut construire un rayon réfléchi ou des rayons de biréfringence.
* La routine de Python n'ajoute pas les contraintes d'aide. Celles-ci doivent être ajoutées manuellement par le script (voir l'exemple dans la section Script)
* Contrairement à la réalité, les indices de réfraction sont associés aux rayons de lumière, mais pas en fonction des côtés de la frontière. Ceci est utile pour émuler la biréfringence, construire des trajectoires de différentes longueurs d'onde dues à la réfraction, et construire facilement l'angle d'apparition de la réflexion interne totale.
* Ces contraintes auxiliaires peuvent être supprimées temporairement et les points terminaux traînés dehors, ce qui peut être utile au cas où on veut construire un rayon réfléchi ou des rayons biréfringent.
* Les deux rayons peuvent se trouver du même côté de l'interface, satisfaisant ainsi à l'équation de contrainte. Il s'agit d'un non-sens physique, sauf si le rapport n2/n1 est de 1,0, auquel cas la contrainte émule une réflexion.
* Contrairement à la réalité, les indices de réfraction sont associés à des rayons de lumière, mais non pas selon les côtés de la frontière. C'est utile pour émuler la biréfringence, construire des chemins de longueurs d'onde différentes en raison de la réfraction, et construire facilement l'angle de début de réflexion interne totale.
* Les arcs de cercle et les ellipses sont également acceptés comme des rayons. Mais c'est également un non-sens physique.
* Les deux rayons peuvent être sur le même côté de l'interface, répondant à l'équation de contrainte. Cela n'a aucun sens physique, à moins que le rapport n2/n1 est de 1,0, auquel cas la contrainte émule une réflexion.
* Arcs de cercle et une ellipse sont également acceptés comme les rayons (non-sens physique).
</div>


<span id="Scripting"></span>
<span id="Scripting"></span>

Revision as of 14:22, 3 May 2024

Sketcher Contrainte de réfraction

Emplacement du menu
Esquisse → Contraintes d'esquisse → Contrainte de réfraction (Loi de Snell)
Ateliers
Sketcher
Raccourci par défaut
K W
Introduit dans la version
0.15
Voir aussi
Aucun

Description

L'outil Sketcher Contrainte de réfraction contraint deux lignes à suivre la loi de réfraction de la lumière lorsqu'elle pénètre à travers une interface où deux matériaux ayant des indices de réfraction différents se rencontrent. Voir Loi de Snell.

Loi de Snell

Utilisation

La séquence des clics est indiquée par des flèches jaunes avec des nombres, n1 et n2 indiquent où les indices de réfraction se trouvent.

  1. Préparez deux lignes pour représenter un faisceau de lumière et une arête pour servir d'interface. Les lignes doivent être situées de part et d'autre de l'interface. L'interface peut être une ligne, un arc, un cercle ou un conique
  2. Sélectionnez une extrémité de la première ligne, une extrémité de la deuxième ligne et l'arête de l'interface. Notez l'ordre de sélection des extrémités.
  3. Il y a plusieurs façons de lancer l'outil :
    • Sélectionnez l'outil Esquisse → Contraintes de l'esquisse → Contrainte de réfraction (loi de Snell) du menu.
    • Utilisez le raccourci clavier : K puis W.
  4. La boîte de dialogue Template:Commande de menu s'ouvre.
  5. Saisissez le Rapport n2/n1, où n2 correspond au milieu où se trouve la deuxième ligne sélectionnée et n1 correspond au milieu de la première ligne.
  6. Une contrainte de la loi de Snell est ajoutée. Si nécessaire, les extrémités sont rendues coïncidentes et contraintes sur l'interface. Ces contraintes supplémentaires sont appelées contraintes d'aide.

Remarques

  • La contrainte de la loi de Snell applique l'équation de la loi simple n1*sin(theta1) = n2*sin(theta2). Elle a besoin que les extrémités des lignes coïncident et soient sur l'interface par d'autres contraintes, sinon le comportement n'est pas défini. Les contraintes d'aide nécessaires sont ajoutées automatiquement en fonction des coordonnées actuelles des éléments.
  • En Python, les contraintes d'aide doivent être ajoutées manuellement (voir Script).
  • Ces contraintes peuvent être temporairement supprimées et les extrémités déplacées, ce qui peut être utile si l'on veut construire un rayon réfléchi ou des rayons de biréfringence.
  • Contrairement à la réalité, les indices de réfraction sont associés aux rayons de lumière, mais pas en fonction des côtés de la frontière. Ceci est utile pour émuler la biréfringence, construire des trajectoires de différentes longueurs d'onde dues à la réfraction, et construire facilement l'angle d'apparition de la réflexion interne totale.
  • Les deux rayons peuvent se trouver du même côté de l'interface, satisfaisant ainsi à l'équation de contrainte. Il s'agit d'un non-sens physique, sauf si le rapport n2/n1 est de 1,0, auquel cas la contrainte émule une réflexion.
  • Les arcs de cercle et les ellipses sont également acceptés comme des rayons. Mais c'est également un non-sens physique.

Script

Les contraintes peuvent être créées à partir de macros et de la console Python en utilisant la fonction suivante:

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

où:

  • Sketch est un objet d'esquisse
  • line1 et pointpos1 sont deux entiers identifiant l'extrémité de la ligne dans le milieu avec un indice de réfraction de n1. line1 est l'index de la ligne dans l'esquisse (la valeur, retournée par Sketch.addGeometry), et pointpos1 doit être 1 pour le point de départ et 2 pour le point final.
  • line2 et pointpos2 sont les index spécifiant le point final de la seconde ligne (dans le support n2)
  • interface est l'index spécifiant la ligne indiquant la position de l'interface entre le support n1 et le support n2
  • n2byn1 est un nombre à virgule flottante égal au rapport des indices de réfraction n2/n1

La page Sketcher Scripts explique les valeurs qui peuvent être utilisées pour line1, pointpos1, line2, pointpos2 et interface et contient d'autres exemples sur la façon de créer des contraintes à partir de scripts Python.

Exemple :

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