Dans cette première partie, on se limite à 3 mobiles et 4 ressorts.
Le système est représenté à l'équilibre. On peut supposer, sans que cela nuise à la généralité du problème, que les ressorts ne sont alors ni comprimés, ni tendus.
Le package pst-ode est utilisé pour la résolution numérique du système d'équations différentielles, le package pst-ressort pour le dessin des ressorts et le package animate pour les animations incluses dans le fichier pdf.
Pour le package pst-ode, les variables seront définies par :
Nous étudions, dans ce document, un cas particulier : c’est une chaîne d’oscillateurs identiques :
Le calcul des modes propres est explicité dans le document :
chaine-oscillateurs-1.pdf
chaine-oscillateurs-1.texfichiers inclus dans le répertoire :
Les animations suivantes sont au format Gif. Les images ont été calculées avec PSTricks. Pour que l'animation soit fluide il faut attendre que le navigateur ait mis dans le cache les 50 images de l'animation.
Premier mode :
Deuxième mode :
Troisième mode :
Sur le document on trouvera une autre animation : propagation d'un ébranlement le long de la chaîne.
Les fichiers du package pst-ressort :
pst-ressort-package
Les packages pst-ode et animate d'Alexander Grahn :
http://www.ctan.org/pkg/pst-ode
http://www.ctan.org/pkg/animate
lundi 31 mars 2014
jeudi 27 mars 2014
Illustrations du couplage de deux oscillateurs avec les packages : pst-ressort, pst-ode et animate
Il ne s’agit pas d’un document sur l’étude des oscillateurs couplés, mais d’une suite
d’exemples réalisés avec PSTricks illustrant ce phénomène. Le système est constitué par deux mobiles auto-porteurs posés sur une table horizontale, chacun d’eux lié à un bord de la table par un ressort et reliés entre eux par un troisième ressort. Nous avons donc un système de deux oscillateurs (m1, k1) et (m2, k2) couplés par le ressort K.
Le système est représenté à l’équilibre. On peut supposer, sans que cela nuise à la généralité du problème, que les ressorts ne sont alors ni comprimés, ni tendus.
Si vous souhaitez des renseignements sur l’étude théorique, celle-ci est très bien faite par Gilbert Gastebois sur sa page personnelle :
http://gilbert.gastebois.pagesperso-orange.fr/java/oscillateur/couplage/theorie_couplage.htm
La résolution numérique du système d’équations différentielles est confiée au package pst-ode et l'animation incorporée au fichier pdf au package animate. Ces deux packages sont l’œuvre d’Alexander Grahn, ils pourraient être utilisés sans difficulté pour l’illustration du cas général.
Nous allons illustrer le cas de l’oscillateur symétrique m1 = m2 = m = 1 kg et k1 = k2 = 5N/m.
Le document source et le pdf concernant les oscillateurs couplés "oscillateurs-couples-v3.tex" et "oscillateurs-couples-v3.pdf" sont dans le répertoire :
D'autres exemples sont dans le répertoire cité.
pst-ode et animate sont sur le serveur du CTAN :
http://www.ctan.org/pkg/pst-ode
http://www.ctan.org/pkg/animate
Les animations suivantes sont au format Gif animé, (pour observer une animation fluide, il faut attendre que les images aient été mises en cache par le navigateur). Les images ont été calculées avec PSTricks. Suivant les conditions initiales :
Premier mode propre : l'oscillateur symétrique.
Les battements :
d’exemples réalisés avec PSTricks illustrant ce phénomène. Le système est constitué par deux mobiles auto-porteurs posés sur une table horizontale, chacun d’eux lié à un bord de la table par un ressort et reliés entre eux par un troisième ressort. Nous avons donc un système de deux oscillateurs (m1, k1) et (m2, k2) couplés par le ressort K.
Le système est représenté à l’équilibre. On peut supposer, sans que cela nuise à la généralité du problème, que les ressorts ne sont alors ni comprimés, ni tendus.
Si vous souhaitez des renseignements sur l’étude théorique, celle-ci est très bien faite par Gilbert Gastebois sur sa page personnelle :
http://gilbert.gastebois.pagesperso-orange.fr/java/oscillateur/couplage/theorie_couplage.htm
La résolution numérique du système d’équations différentielles est confiée au package pst-ode et l'animation incorporée au fichier pdf au package animate. Ces deux packages sont l’œuvre d’Alexander Grahn, ils pourraient être utilisés sans difficulté pour l’illustration du cas général.
Nous allons illustrer le cas de l’oscillateur symétrique m1 = m2 = m = 1 kg et k1 = k2 = 5N/m.
Le document source et le pdf concernant les oscillateurs couplés "oscillateurs-couples-v3.tex" et "oscillateurs-couples-v3.pdf" sont dans le répertoire :
D'autres exemples sont dans le répertoire cité.
pst-ode et animate sont sur le serveur du CTAN :
http://www.ctan.org/pkg/pst-ode
http://www.ctan.org/pkg/animate
Les animations suivantes sont au format Gif animé, (pour observer une animation fluide, il faut attendre que les images aient été mises en cache par le navigateur). Les images ont été calculées avec PSTricks. Suivant les conditions initiales :
Premier mode propre : l'oscillateur symétrique.
Deuxième mode propre : l'oscillateur antisymétrique
Les battements :
vendredi 21 mars 2014
jeudi 20 mars 2014
Oscillateur élastique horizontal : une application de pst-ressort
L’expérience se déroule sur une table horizontale à coussin d’air, avec mobile autoporteur.
Le mobile autoporteur :
Les ressorts non sollicités (à vide).
Les ressorts sont fixés au mobile autoporteur, le système est en équilibre.
Le mobile autoporteur est écarté vers la droite, puis lâché sans vitesse initiale.
x(t) :
Sur le document, l'animation a été réalisée avec le package animate et est incluse dans le fichier pdf.
mobileautoporteur2ressorts.pdf
mobileautoporteur2ressorts.tex
Tous les fichiers sont dans ce répertoire :
Le début de l'écriture du package pst-ressort est à cette page :
http://pstricks.blogspot.fr/2014/03/representation-dun-ressort-en-pseudo.html
Le mobile autoporteur :
Les ressorts non sollicités (à vide).
Les ressorts sont fixés au mobile autoporteur, le système est en équilibre.
Le mobile autoporteur est écarté vers la droite, puis lâché sans vitesse initiale.
x(t) :
Sur le document, l'animation a été réalisée avec le package animate et est incluse dans le fichier pdf.
mobileautoporteur2ressorts.pdf
mobileautoporteur2ressorts.tex
Tous les fichiers sont dans ce répertoire :
Le début de l'écriture du package pst-ressort est à cette page :
http://pstricks.blogspot.fr/2014/03/representation-dun-ressort-en-pseudo.html
mardi 18 mars 2014
applications de pst-ressort - suite 2
On trouve dans le livre de “Mécanique Physique” de Fleury et Mathieu, paru aux éditions Eyrolles en 1953, page 41, une application intéressante du pistolet à ressort précédemment étudié:
http://pstricks.blogspot.fr/2014/03/application-de-pst-ressort-un-pistolet.html
En voici l’illustration reproduite d’après le schéma du livre.
Le texte suivant est extrait du livre :
« Un wagonnet installé sur une petite voie ferrée PQRT est lancé par descente sur un plan incliné QR et continue son mouvement suivant RT, avec une vitesse uniforme, sur un chemin horizontal. Dans ce wagonnet se trouve un pistolet à ressort capable de lancer une bille suivant la verticale. Le lancer de la bille se fait, commandé par un déclic convenable, quand la wagonnet vient de prendre sur RT son mouvement uniforme. La bille B part de A. Elle décrit la parabole ASA’ pendant que la wagon continue sa route de R vers T. La bille retombe en A’ dans l’entonnoir d’où elle était partie en A. La vitesse horizontale initiale est conservée malgré le mouvement vertical. »
Cet exemple est à la fin du document pistolet_a_bille.tex et pistolet_a_bille.pdf:
lundi 17 mars 2014
application de pst-ressort : un pistolet à ressort et oscillations périodiques
Quelques éléments théoriques et deux animations réalisées avec le package animate sont inclus dans le répertoire :
Les images pour l'animation au format Gif sont obtenues avec le code suivant :
\documentclass{article}
\usepackage{pst-ressort,multido}
\usepackage{pst-slpe}
\usepackage[a4paper,margin=1cm]{geometry}
\SpecialCoor
\pagestyle{empty}
\begin{document}
\begin{center}
\psset{li=10,N=50,dl=0,nS=15,unit=1,alpha=12}%
\psset{unit=0.75}
\multido{\rt=0+0.0094,\i=0+1,\rb=-0.0282+0.0078}{30}{%
\begin{pspicture}(-1,0)(1,32)
\psframe*[linecolor=yellow!20](-1,0)(1,32)
\psgrid[subgriddiv=0,gridcolor=lightgray,griddots=10,gridlabels=0pt]
\psframe[fillstyle=hlines,linestyle=none,hatchsep=2pt](-1,0)(1,-0.2)
\psline(-1,0)(1,0)
\psframe(-1,0)(1,32)
\pstVerb{
/RadtoDeg { 180 mul Pi div } bind def % convert from radian to degrees
/Pi 3.14159265359 def
/m' 0.010 def
/k' 20 def
/z0 0.05 def
/zv 0.10 def
/g' 9.81 def
/O' k' m' div sqrt def
/T' 2 Pi mul O' div def}%
\ifnum\i<5 br="">\pstVerb{
/z' z0 zv sub g' O' dup mul div add O' RadtoDeg \rt\space mul cos mul
g' O' dup mul div sub zv add def
}%
\psRessort[linewidth=0.05,linecolor=blue](0,0)(! 0 z' 100 mul)
\rput(! 0 z' 100 mul 0.6 add){\psBall(0,0){black}{0.6}}
\else
\pstVerb{
/t' \rb\space def
/z' 0.5 g' mul t' dup mul mul neg 2 t' mul add zv add def
}%
\psRessort[linewidth=0.05,linecolor=blue](0,0)(0,10)
\rput(! 0 z' 100 mul 0.6 add){\psBall(0,0){black}{0.6}}
\fi
\end{pspicture}\newpage}
\end{center}
\end{document}5>
Tous les fichiers sont dans le répertoire :
pst-ressort-package
mercredi 12 mars 2014
Illustrations, avec PSTricks, du mouvement de 2 pendules élastiques verticaux couplés
C'est une application du package pst-ressorts :
L'étude théorique très complète a été effectuée par Jacques Charrier sur le site de l’université de Nantes :
http://www.sciences.univ-nantes.fr/sites/jacques_charrier/sp/tdl/pend_elast_couple/ pend_elast_couples.html
On se référera donc à ce document pour tous les compléments théoriques utiles.
Ce document est un exemple d'utilisation du package pour illustrer l'étude du système formé par les deux pendules à ressort verticaux couplés.
(a) un des ressort de coefficient de raideur k ;
(b) une masse (m) est accrochée au premier ressort, le système est représenté à l’équilibre ;
(c) un deuxième ressort auquel est suspendu une masse (m) est accroché à la première masse. Le système est représenté à l’équilibre ;
(d) on tire le système verticalement vers le bas d’une longueur Δ l0 et il est temporairement maintenu dans cette position, avant d’être lâché sans vitesse initiale.
Le document comprend deux animations réalisées avec le package animate. En voici une au format gif avec d'autres conditions initiales :
Les fichiers sont dans ce répertoire :
L'étude théorique très complète a été effectuée par Jacques Charrier sur le site de l’université de Nantes :
http://www.sciences.univ-nantes.fr/sites/jacques_charrier/sp/tdl/pend_elast_couple/ pend_elast_couples.html
On se référera donc à ce document pour tous les compléments théoriques utiles.
Ce document est un exemple d'utilisation du package pour illustrer l'étude du système formé par les deux pendules à ressort verticaux couplés.
(a) un des ressort de coefficient de raideur k ;
(b) une masse (m) est accrochée au premier ressort, le système est représenté à l’équilibre ;
(c) un deuxième ressort auquel est suspendu une masse (m) est accroché à la première masse. Le système est représenté à l’équilibre ;
(d) on tire le système verticalement vers le bas d’une longueur Δ l0 et il est temporairement maintenu dans cette position, avant d’être lâché sans vitesse initiale.
Le document comprend deux animations réalisées avec le package animate. En voici une au format gif avec d'autres conditions initiales :
Les fichiers sont dans ce répertoire :
pst-ressort : un exemple réalisé par Juergen Gilg
C'est une animation avec 3 ressorts, elle est incorporée dans le pdf. Le fichier source est attaché au pdf.
Voici une image de cette animation.
Le fichier pst-ressort_examples.pdf est dans le répertoire :
pst-ressort-package
Voici une image de cette animation.
Le fichier pst-ressort_examples.pdf est dans le répertoire :
pst-ressort-package
mercredi 5 mars 2014
Thomas Söll : une application de pst-perspective
Une application du package pst-perspective de Thomas : une église joliment dessinée :
Le package pst-perspective est disponible sur le serveur du CTAN :
Concernant le dessin de l'église, voici le listing du fichier source :
\documentclass{article}
\usepackage{amsmath}
\usepackage[dvipsnames]{xcolor} %% Farben sind im Dokument xcolor.pdf definiert
\usepackage[distiller,rgb]{pstricks}
\usepackage{multido,pst-grad,pst-eucl,pstricks-add}
\makeatletter %
\pst@addfams{pst-perspective}
\define@boolkey[psset]{pst-perspective}[Pst@]{translineA}[false]{} % showtransline
\define@boolkey[psset]{pst-perspective}[Pst@]{translineB}[false]{} % showtransline
\define@boolkey[psset]{pst-perspective}[Pst@]{translineK}[true]{} % show transline
\define@boolkey[psset]{pst-perspective}[Pst@]{LowPoint}[false]{} % show transline
\define@key[psset]{pst-perspective}{transcolor}[blue]{\def\psk@transTS@transcolor{#1}}
\define@key[psset]{pst-perspective}{transAcolor}[green]{\def\psk@transTS@transAcolor{#1}}
\define@key[psset]{pst-perspective}{transBcolor}[blue]{\def\psk@transTS@transBcolor{#1}}
\define@key[psset]{pst-perspective}{translinestyle}[solid]{\def\psk@transTS@translinestyle{#1}}
\define@key[psset]{pst-perspective}{transAlinestyle}[dashed]{\def\psk@transTS@transAlinestyle{#1}}
\define@key[psset]{pst-perspective}{transBlinestyle}[dashed]{\def\psk@transTS@transBlinestyle{#1}}
\define@key[psset]{pst-perspective}{translinewidth}[0.8pt]{\def\psk@transTS@translinewidth{#1}}
\define@key[psset]{pst-perspective}{transAlinewidth}[0.7pt]{\def\psk@transTS@transAlinewidth{#1}}
\define@key[psset]{pst-perspective}{transBlinewidth}[0.7pt]{\def\psk@transTS@transBlinewidth{#1}}
\define@key[psset]{pst-perspective}{LowP}[{0|0}]{\def\psk@transTS@LowP{#1}}
\define@key[psset]{pst-perspective}{originT}[{0|0}]{\def\psk@transTS@originT{#1}}
\define@key[psset]{pst-perspective}{base}[0]{\def\psk@transTS@base{#1 }} % y-Wert der Basis f\"{u}r die Transformation
\define@key[psset]{pst-perspective}{phi}[45]{\def\psk@transTS@phi{#1 }}% Winkel f\"{u}r das Schr\"{a}gbild
\define@key[psset]{pst-perspective}{vkf}[0.5]{\def\psk@transTS@vkf{#1 }} % Verk\"{u}rzungsfaktor
\psset[pst-perspective]{phi=45,vkf=0.5,base=0,translineA=false,translineB=false,transAcolor=green,transBcolor=blue,%
transAlinewidth=0.7pt,transBlinewidth=0.7pt,transAlinestyle=dashed,transBlinestyle=dashed,%
translineK=true,transcolor=blue,translinewidth=0.8pt,translinestyle=solid,LowPoint=false,LowP={0,0},originT={0,0}}%
\SpecialCoor%
\def\ba{\psk@transTS@base}
\def\pstransTS{\pst@object{pstpstransTS}}%
%
\def\pstpstransTS@i(#1)#2#3{%
\begingroup%
% (#1) Punkt 1
% #2 Node-Name des Startpunktes % #3 Node-Name des transformierten Punktes
\pst@killglue
\use@par
\rput(\psk@transTS@originT){\pnode(#1){#2}}%
\pst@getcoor{#1}\pst@tempA%
\pst@getcoor{\psk@transTS@LowP}\pst@tempB
\rput(\psk@transTS@originT){\pnode(! %
\pst@tempA \tx@UserCoor /y1 ED /x1 ED
\ifPst@LowPoint
\pst@tempB \tx@UserCoor /y2 ED /x2 ED
\else
/y2 \psk@transTS@base def \fi
/lang y2 y1 sub abs \psk@transTS@vkf mul def
/lang2 y2 y1 sub def
lang2 0 ge {/alph2 \psk@transTS@phi 180 sub def} {/alph2 \psk@transTS@phi def} ifelse
lang alph2 PtoC exch x1 add exch y2 add){#3}
\ifPst@translineA
\ifPst@LowPoint
\pcline[linecolor=\psk@transTS@transAcolor,linestyle=\psk@transTS@transAlinestyle,linewidth=\psk@transTS@transAlinewidth](! \pst@tempA \tx@UserCoor pop \pst@tempB \tx@UserCoor exch pop)(#2)
\else
\pcline[linecolor=\psk@transTS@transAcolor,linestyle=\psk@transTS@transAlinestyle,linewidth=\psk@transTS@transAlinewidth](! \pst@tempA \tx@UserCoor pop \psk@transTS@base)(#2)
\fi
\else \fi%
\ifPst@translineB
\ifPst@LowPoint
\pcline[linecolor=\psk@transTS@transBcolor,linestyle=\psk@transTS@transBlinestyle,linewidth=\psk@transTS@transBlinewidth](! \pst@tempA \tx@UserCoor pop \pst@tempB \tx@UserCoor exch pop)(#3)
\else
\pcline[linecolor=\psk@transTS@transBcolor,linestyle=\psk@transTS@transBlinestyle,linewidth=\psk@transTS@transBlinewidth](! \pst@tempA \tx@UserCoor pop \psk@transTS@base)(#3)
\fi
\else \fi%
}%
\endgroup
\ignorespaces
}
%------------------------------------------------------------------
\def\pstransTSK{\pst@object{pstpstransTSK}}%
\def\pstpstransTSK@i(#1)#2#3#4{%
\begingroup%
% (#1) Koordinaten des Punktes (kartesisch oder Polarkoordinaten)
% #2 Originall\"{a}nge #3 Node-Name des Startpunktes % #4 Node-Name des transformierten Punktes
\pst@killglue
\use@par
\rput(#1){\pnode(0,0){#3}}
\rput(#1){\pnode(! %
/l1 #2 def
/l2 l1 \psk@transTS@vkf mul def
l2 \psk@transTS@phi PtoC){#4}}
\ifPst@translineK
\pcline[linecolor=\psk@transTS@transcolor,linestyle=\psk@transTS@translinestyle,linewidth=\psk@transTS@translinewidth](#3)(#4)
\else \fi%
\endgroup
\ignorespaces
}
\makeatother
\begin{document}
\psscalebox{1}{%
\begin{pspicture}[showgrid=false](-0.5,-3)(12,14.4)
\psset{linejoin=2,phi=35,vkf=0.5}
\pstransTSK[translineK=false](-3,0){11}{GR1}{GR1'}
\pstransTSK[translineK=false](11,0){11}{GR2}{GR2'}
\pstransTSK[translineK=false](-3,0){-8}{GR3}{GR3'}
\pstransTSK[translineK=false](11,0){-8}{GR4}{GR4'}
\pspolygon[fillstyle=solid,fillcolor=green!60!black!80,linestyle=none](GR1')(GR2')(GR4')(GR3')
{\psset{base=-3}
\multido{\i=0+1,\n=1+1,\ra=-45+22.5,\rb=-22.5+22.5}{12}{%
\pstransTS[originT={4,3}](6;\ra){D\i}{E\i}
\pstransTS[originT={4,3}](6;\rb){F\n}{G\n}
\pstransTS[originT={4,4}](6;\ra){H\i}{I\i}
\pstransTS[originT={4,4}](6;\rb){J\n}{K\n}
\psline(E\i)(G\n)
\psline(I\i)(K\n)
\pspolygon[fillstyle=solid,fillcolor=gray,opacity=1](E\i)(G\n)(K\n)(I\i)
}}
{\psset{translineK=false}%
\pstransTSK(0,0){1}{A1}{B1}
\pstransTSK(2,0){1}{A2}{B2}
\pstransTSK(2,3){1}{A3}{B3}
\pstransTSK(0,2){1}{A4}{B4}
%----------------------------
\pstransTSK(0,0){6}{A1}{C1}
\pstransTSK(2,0){6}{A2}{C2}
\pstransTSK(2,3){6}{A3}{C3}
\pstransTSK(0,2){6}{A4}{C4}
}
\psline[linestyle=dashed](C1)(C4)
\psline[linestyle=dashed](B1)(C1)(C2)
\pspolygon[fillstyle=solid,fillcolor=green!30,opacity=1](B1)(B2)(B3)(B4)
\pspolygon[fillstyle=solid,fillcolor=green!30,opacity=1](B2)(C2)(C3)(B3)
\pspolygon[fillstyle=vlines*,fillcolor=BrickRed,opacity=1,hatchangle=120,hatchsep=1.5pt](B4)(B3)(C3)(C4)
%----------------------------
\pstransTSK(2,0){6}{A5}{C5}
\pstransTSK(6,0){6}{A6}{C6}
\pstransTSK(6,4){6}{A7}{C7}
\pstransTSK(4,6){6}{A8}{C8}
\pstransTSK(2,4){6}{A9}{C9}
%----------------------------
\pspolygon[fillstyle=solid,fillcolor=yellow!50,opacity=1](C5)(C6)(C7)(C9)
\pspolygon[fillstyle=solid,fillcolor=yellow!50,opacity=1](C7)(C8)(C9)
\pspolygon[fillstyle=solid,fillcolor=yellow!50,opacity=1](A5)(A6)(A7)(A9)
\pspolygon[fillstyle=solid,fillcolor=yellow!50,opacity=1](A6)(C6)(C7)(A7)
\pspolygon[fillstyle=vlines*,fillcolor=BrickRed,opacity=1,hatchangle=135,hatchsep=1.5pt](A9)(A8)(C8)(C9)
\pspolygon[fillstyle=vlines*,fillcolor=BrickRed,opacity=1,hatchangle=45,hatchsep=1.5pt](A7)(C7)(C8)(A8)
\pspolygon[fillstyle=solid,fillcolor=yellow!50,opacity=1](A7)(A8)(A9)
%----------------------------
\pstransTSK(6,0){2}{A10}{C10}
\pstransTSK(8,0){2}{A11}{C11}
\pstransTSK(8,12){2}{A12}{C12}
\pstransTSK(6,12){2}{A13}{C13}
\pstransTSK(8.2,12){-0.2}{A14}{B14}
\pstransTSK(5.8,12){-0.2}{A15}{B15}
\pstransTSK(8.2,12){2.2}{A14}{C14}
\pstransTSK(5.8,12){2.2}{A15}{C15}
\pstransTSK[translineK=false](8,14){2}{A16}{C16}
\pstransTSK[translineK=false](6,14){2}{A17}{C17}
\psIntersectionPoint(A16)(C17)(A17)(C16){SB1}
%----------------------------
\pspolygon[fillstyle=solid,fillcolor=cyan!50,opacity=1](C10)(C11)(C12)(C13)
\pspolygon[fillstyle=solid,fillcolor=cyan!50,opacity=1](A10)(A11)(A12)(A13)
\pspolygon[fillstyle=solid,fillcolor=cyan!50,opacity=1](A11)(C11)(C12)(A12)
\pspolygon[fillstyle=vlines*,fillcolor=BrickRed,opacity=1,hatchangle=45,hatchsep=1.5pt](C14)(C15)(SB1)
\pspolygon[fillstyle=vlines*,fillcolor=BrickRed,opacity=1,hatchangle=45,hatchsep=1.5pt](B15)(C15)(SB1)
\pspolygon[fillstyle=vlines*,fillcolor=BrickRed,opacity=1,hatchangle=45,hatchsep=1.5pt](B14)(B15)(SB1)
\pspolygon[fillstyle=vlines*,fillcolor=BrickRed,opacity=1,hatchangle=45,hatchsep=1.5pt](B14)(C14)(SB1)
{\psset{base=-3}
\multido{\i=0+1,\n=1+1,\ra=-45+22.5,\rb=-22.5+22.5}{3}{%
\pstransTS[originT={4,3}](6;\ra){D\i}{E\i}
\pstransTS[originT={4,3}](6;\rb){F\n}{G\n}
\pstransTS[originT={4,4}](6;\ra){H\i}{I\i}
\pstransTS[originT={4,4}](6;\rb){J\n}{K\n}
\psline(E\i)(G\n)
\psline(I\i)(K\n)
\pspolygon[fillstyle=solid,fillcolor=gray,opacity=1](E\i)(G\n)(K\n)(I\i)
}}
%----------- T\"{u}r --------------------------------------
\pstransTSK[translineK=false](1,0){1}{TL}{TL'}
\rput(TL'){%
\psscalebox{1}{%
\pscustom[fillstyle=solid,fillcolor=brown]{%
\psline(0.2,0)(-0.2,0)(-0.2,0.4)
\psarcn(0.2,0.4){0.4}{180}{120}
\psarcn(-0.2,0.4){0.4}{60}{0}
\closepath%
}
\psline[linewidth=0.5pt](0,0)(0,0.75)
\pscircle[linewidth=0.25pt](0.04,0.35){0.025}
\pscircle[linewidth=0.25pt](-0.04,0.35){0.025}
}}
%----------- T\"{u}r --------------------------------------
\rput(4,0){%
%\psscalebox{2}
{\psset{unit=2}%
\pscustom[fillstyle=solid,fillcolor=brown]{%
\psline(0.2,0)(-0.2,0)(-0.2,0.4)
\psarcn(0.2,0.4){0.4}{180}{120}
\psarcn(-0.2,0.4){0.4}{60}{0}
\closepath%
}
\psline[linewidth=0.5pt](0,0)(0,0.75)
\pscircle[linewidth=0.25pt](0.04,0.35){0.025}
\pscircle[linewidth=0.25pt](-0.04,0.35){0.025}
}}
%------- Uhr -------------------------
\rput(7,6){%
\psscalebox{1.5}{%
\pscircle[fillstyle=solid,fillcolor=lightgray!50](0,2.8){0.25}
\rput(0,2.8){%
\psline{c-c}(0,0)(0.14;50)
\psline{c-c}(0,0)(0.19;-30)
}
}}
%---------- Fenster -----------------------------------
\def\fenster{%
\pscustom[fillstyle=solid,fillcolor=white]{%
\psline(0.1,0)(-0.1,0)(-0.1,0.3)
\psarcn(0.1,0.3){0.2}{180}{120}
\psarcn(-0.1,0.3){0.2}{60}{0}
\closepath%
}}
\rput(3,2){%
\psscalebox{1.5}{\fenster}}
\rput(5,2){%
\psscalebox{1.5}{\fenster}}
%---------- Weg -----------------------------------------
\pstransTSK[translineK=false](3.5,0){-8}{W1}{W1'}
\pstransTSK[translineK=false](4.5,0){-8}{W2}{W2'}
\pspolygon[fillstyle=solid,fillcolor=gray!50,linestyle=none](W1)(W1')(W2')(W2)
{\psset{translineK=false,linestyle=none}
\multido{\i=1+1,\n=1+1}{8}{%
\pstransTSK(3.5,0){1 \i\space sub}{WM1a\i}{WM1a'\i}
\pstransTSK(3.5,0){0.5 \i\space sub}{WM1\i}{WM1'\i}
\pstransTSK(3.75,0){1 \i\space sub}{WM2a\i}{WM2a'\i}
\pstransTSK(3.75,0){0.7 \i\space sub}{WM2\i}{WM2'\i}
\pstransTSK(4.0,0){1 \i\space sub}{WM3a\i}{WM3a'\i}
\pstransTSK(4.0,0){0.5 \i\space sub}{WM3\i}{WM3'\i}
\pspolygon[fillstyle=solid,fillcolor=green!40,opacity=1](WM1a'\i)(WM1'\i)(WM2'\i)(WM2a'\i)
\pspolygon[fillstyle=solid,fillcolor=black!50,opacity=1](WM1'\i)(WM2'\i)(WM3'\i)
\pspolygon[fillstyle=solid,fillcolor=blue!40,opacity=1](WM2a'\i)(WM2'\i)(WM3'\i)(WM3a'\i)
\pstransTSK(4,0){0.5 \n\space sub}{WM4a\n}{WM4a'\n}
\pstransTSK(4,0){-\n}{WM4\n}{WM4'\n}
\pstransTSK(4.25,0){0.5 \n\space sub}{WM5a\n}{WM5a'\n}
\pstransTSK(4.25,0){.2 \n\space sub}{WM5\n}{WM5'\n}
\pstransTSK(4.5,0){0.5 \n\space sub}{WM6a\n}{WM6a'\n}
\pstransTSK(4.5,0){-\n}{WM6\n}{WM6'\n}
\pspolygon[fillstyle=solid,fillcolor=green!40,opacity=1](WM4a'\n)(WM4'\n)(WM5'\n)(WM5a'\n)
\pspolygon[fillstyle=solid,fillcolor=black!50,opacity=1](WM4'\n)(WM5'\n)(WM6'\n)
\pspolygon[fillstyle=solid,fillcolor=blue!40,opacity=1](WM5a'\n)(WM5'\n)(WM6'\n)(WM6a'\n)
}}
\end{pspicture}
}
\end{document}
Le package pst-perspective est disponible sur le serveur du CTAN :
Concernant le dessin de l'église, voici le listing du fichier source :
\documentclass{article}
\usepackage{amsmath}
\usepackage[dvipsnames]{xcolor} %% Farben sind im Dokument xcolor.pdf definiert
\usepackage[distiller,rgb]{pstricks}
\usepackage{multido,pst-grad,pst-eucl,pstricks-add}
\makeatletter %
\pst@addfams{pst-perspective}
\define@boolkey[psset]{pst-perspective}[Pst@]{translineA}[false]{} % showtransline
\define@boolkey[psset]{pst-perspective}[Pst@]{translineB}[false]{} % showtransline
\define@boolkey[psset]{pst-perspective}[Pst@]{translineK}[true]{} % show transline
\define@boolkey[psset]{pst-perspective}[Pst@]{LowPoint}[false]{} % show transline
\define@key[psset]{pst-perspective}{transcolor}[blue]{\def\psk@transTS@transcolor{#1}}
\define@key[psset]{pst-perspective}{transAcolor}[green]{\def\psk@transTS@transAcolor{#1}}
\define@key[psset]{pst-perspective}{transBcolor}[blue]{\def\psk@transTS@transBcolor{#1}}
\define@key[psset]{pst-perspective}{translinestyle}[solid]{\def\psk@transTS@translinestyle{#1}}
\define@key[psset]{pst-perspective}{transAlinestyle}[dashed]{\def\psk@transTS@transAlinestyle{#1}}
\define@key[psset]{pst-perspective}{transBlinestyle}[dashed]{\def\psk@transTS@transBlinestyle{#1}}
\define@key[psset]{pst-perspective}{translinewidth}[0.8pt]{\def\psk@transTS@translinewidth{#1}}
\define@key[psset]{pst-perspective}{transAlinewidth}[0.7pt]{\def\psk@transTS@transAlinewidth{#1}}
\define@key[psset]{pst-perspective}{transBlinewidth}[0.7pt]{\def\psk@transTS@transBlinewidth{#1}}
\define@key[psset]{pst-perspective}{LowP}[{0|0}]{\def\psk@transTS@LowP{#1}}
\define@key[psset]{pst-perspective}{originT}[{0|0}]{\def\psk@transTS@originT{#1}}
\define@key[psset]{pst-perspective}{base}[0]{\def\psk@transTS@base{#1 }} % y-Wert der Basis f\"{u}r die Transformation
\define@key[psset]{pst-perspective}{phi}[45]{\def\psk@transTS@phi{#1 }}% Winkel f\"{u}r das Schr\"{a}gbild
\define@key[psset]{pst-perspective}{vkf}[0.5]{\def\psk@transTS@vkf{#1 }} % Verk\"{u}rzungsfaktor
\psset[pst-perspective]{phi=45,vkf=0.5,base=0,translineA=false,translineB=false,transAcolor=green,transBcolor=blue,%
transAlinewidth=0.7pt,transBlinewidth=0.7pt,transAlinestyle=dashed,transBlinestyle=dashed,%
translineK=true,transcolor=blue,translinewidth=0.8pt,translinestyle=solid,LowPoint=false,LowP={0,0},originT={0,0}}%
\SpecialCoor%
\def\ba{\psk@transTS@base}
\def\pstransTS{\pst@object{pstpstransTS}}%
%
\def\pstpstransTS@i(#1)#2#3{%
\begingroup%
% (#1) Punkt 1
% #2 Node-Name des Startpunktes % #3 Node-Name des transformierten Punktes
\pst@killglue
\use@par
\rput(\psk@transTS@originT){\pnode(#1){#2}}%
\pst@getcoor{#1}\pst@tempA%
\pst@getcoor{\psk@transTS@LowP}\pst@tempB
\rput(\psk@transTS@originT){\pnode(! %
\pst@tempA \tx@UserCoor /y1 ED /x1 ED
\ifPst@LowPoint
\pst@tempB \tx@UserCoor /y2 ED /x2 ED
\else
/y2 \psk@transTS@base def \fi
/lang y2 y1 sub abs \psk@transTS@vkf mul def
/lang2 y2 y1 sub def
lang2 0 ge {/alph2 \psk@transTS@phi 180 sub def} {/alph2 \psk@transTS@phi def} ifelse
lang alph2 PtoC exch x1 add exch y2 add){#3}
\ifPst@translineA
\ifPst@LowPoint
\pcline[linecolor=\psk@transTS@transAcolor,linestyle=\psk@transTS@transAlinestyle,linewidth=\psk@transTS@transAlinewidth](! \pst@tempA \tx@UserCoor pop \pst@tempB \tx@UserCoor exch pop)(#2)
\else
\pcline[linecolor=\psk@transTS@transAcolor,linestyle=\psk@transTS@transAlinestyle,linewidth=\psk@transTS@transAlinewidth](! \pst@tempA \tx@UserCoor pop \psk@transTS@base)(#2)
\fi
\else \fi%
\ifPst@translineB
\ifPst@LowPoint
\pcline[linecolor=\psk@transTS@transBcolor,linestyle=\psk@transTS@transBlinestyle,linewidth=\psk@transTS@transBlinewidth](! \pst@tempA \tx@UserCoor pop \pst@tempB \tx@UserCoor exch pop)(#3)
\else
\pcline[linecolor=\psk@transTS@transBcolor,linestyle=\psk@transTS@transBlinestyle,linewidth=\psk@transTS@transBlinewidth](! \pst@tempA \tx@UserCoor pop \psk@transTS@base)(#3)
\fi
\else \fi%
}%
\endgroup
\ignorespaces
}
%------------------------------------------------------------------
\def\pstransTSK{\pst@object{pstpstransTSK}}%
\def\pstpstransTSK@i(#1)#2#3#4{%
\begingroup%
% (#1) Koordinaten des Punktes (kartesisch oder Polarkoordinaten)
% #2 Originall\"{a}nge #3 Node-Name des Startpunktes % #4 Node-Name des transformierten Punktes
\pst@killglue
\use@par
\rput(#1){\pnode(0,0){#3}}
\rput(#1){\pnode(! %
/l1 #2 def
/l2 l1 \psk@transTS@vkf mul def
l2 \psk@transTS@phi PtoC){#4}}
\ifPst@translineK
\pcline[linecolor=\psk@transTS@transcolor,linestyle=\psk@transTS@translinestyle,linewidth=\psk@transTS@translinewidth](#3)(#4)
\else \fi%
\endgroup
\ignorespaces
}
\makeatother
\begin{document}
\psscalebox{1}{%
\begin{pspicture}[showgrid=false](-0.5,-3)(12,14.4)
\psset{linejoin=2,phi=35,vkf=0.5}
\pstransTSK[translineK=false](-3,0){11}{GR1}{GR1'}
\pstransTSK[translineK=false](11,0){11}{GR2}{GR2'}
\pstransTSK[translineK=false](-3,0){-8}{GR3}{GR3'}
\pstransTSK[translineK=false](11,0){-8}{GR4}{GR4'}
\pspolygon[fillstyle=solid,fillcolor=green!60!black!80,linestyle=none](GR1')(GR2')(GR4')(GR3')
{\psset{base=-3}
\multido{\i=0+1,\n=1+1,\ra=-45+22.5,\rb=-22.5+22.5}{12}{%
\pstransTS[originT={4,3}](6;\ra){D\i}{E\i}
\pstransTS[originT={4,3}](6;\rb){F\n}{G\n}
\pstransTS[originT={4,4}](6;\ra){H\i}{I\i}
\pstransTS[originT={4,4}](6;\rb){J\n}{K\n}
\psline(E\i)(G\n)
\psline(I\i)(K\n)
\pspolygon[fillstyle=solid,fillcolor=gray,opacity=1](E\i)(G\n)(K\n)(I\i)
}}
{\psset{translineK=false}%
\pstransTSK(0,0){1}{A1}{B1}
\pstransTSK(2,0){1}{A2}{B2}
\pstransTSK(2,3){1}{A3}{B3}
\pstransTSK(0,2){1}{A4}{B4}
%----------------------------
\pstransTSK(0,0){6}{A1}{C1}
\pstransTSK(2,0){6}{A2}{C2}
\pstransTSK(2,3){6}{A3}{C3}
\pstransTSK(0,2){6}{A4}{C4}
}
\psline[linestyle=dashed](C1)(C4)
\psline[linestyle=dashed](B1)(C1)(C2)
\pspolygon[fillstyle=solid,fillcolor=green!30,opacity=1](B1)(B2)(B3)(B4)
\pspolygon[fillstyle=solid,fillcolor=green!30,opacity=1](B2)(C2)(C3)(B3)
\pspolygon[fillstyle=vlines*,fillcolor=BrickRed,opacity=1,hatchangle=120,hatchsep=1.5pt](B4)(B3)(C3)(C4)
%----------------------------
\pstransTSK(2,0){6}{A5}{C5}
\pstransTSK(6,0){6}{A6}{C6}
\pstransTSK(6,4){6}{A7}{C7}
\pstransTSK(4,6){6}{A8}{C8}
\pstransTSK(2,4){6}{A9}{C9}
%----------------------------
\pspolygon[fillstyle=solid,fillcolor=yellow!50,opacity=1](C5)(C6)(C7)(C9)
\pspolygon[fillstyle=solid,fillcolor=yellow!50,opacity=1](C7)(C8)(C9)
\pspolygon[fillstyle=solid,fillcolor=yellow!50,opacity=1](A5)(A6)(A7)(A9)
\pspolygon[fillstyle=solid,fillcolor=yellow!50,opacity=1](A6)(C6)(C7)(A7)
\pspolygon[fillstyle=vlines*,fillcolor=BrickRed,opacity=1,hatchangle=135,hatchsep=1.5pt](A9)(A8)(C8)(C9)
\pspolygon[fillstyle=vlines*,fillcolor=BrickRed,opacity=1,hatchangle=45,hatchsep=1.5pt](A7)(C7)(C8)(A8)
\pspolygon[fillstyle=solid,fillcolor=yellow!50,opacity=1](A7)(A8)(A9)
%----------------------------
\pstransTSK(6,0){2}{A10}{C10}
\pstransTSK(8,0){2}{A11}{C11}
\pstransTSK(8,12){2}{A12}{C12}
\pstransTSK(6,12){2}{A13}{C13}
\pstransTSK(8.2,12){-0.2}{A14}{B14}
\pstransTSK(5.8,12){-0.2}{A15}{B15}
\pstransTSK(8.2,12){2.2}{A14}{C14}
\pstransTSK(5.8,12){2.2}{A15}{C15}
\pstransTSK[translineK=false](8,14){2}{A16}{C16}
\pstransTSK[translineK=false](6,14){2}{A17}{C17}
\psIntersectionPoint(A16)(C17)(A17)(C16){SB1}
%----------------------------
\pspolygon[fillstyle=solid,fillcolor=cyan!50,opacity=1](C10)(C11)(C12)(C13)
\pspolygon[fillstyle=solid,fillcolor=cyan!50,opacity=1](A10)(A11)(A12)(A13)
\pspolygon[fillstyle=solid,fillcolor=cyan!50,opacity=1](A11)(C11)(C12)(A12)
\pspolygon[fillstyle=vlines*,fillcolor=BrickRed,opacity=1,hatchangle=45,hatchsep=1.5pt](C14)(C15)(SB1)
\pspolygon[fillstyle=vlines*,fillcolor=BrickRed,opacity=1,hatchangle=45,hatchsep=1.5pt](B15)(C15)(SB1)
\pspolygon[fillstyle=vlines*,fillcolor=BrickRed,opacity=1,hatchangle=45,hatchsep=1.5pt](B14)(B15)(SB1)
\pspolygon[fillstyle=vlines*,fillcolor=BrickRed,opacity=1,hatchangle=45,hatchsep=1.5pt](B14)(C14)(SB1)
{\psset{base=-3}
\multido{\i=0+1,\n=1+1,\ra=-45+22.5,\rb=-22.5+22.5}{3}{%
\pstransTS[originT={4,3}](6;\ra){D\i}{E\i}
\pstransTS[originT={4,3}](6;\rb){F\n}{G\n}
\pstransTS[originT={4,4}](6;\ra){H\i}{I\i}
\pstransTS[originT={4,4}](6;\rb){J\n}{K\n}
\psline(E\i)(G\n)
\psline(I\i)(K\n)
\pspolygon[fillstyle=solid,fillcolor=gray,opacity=1](E\i)(G\n)(K\n)(I\i)
}}
%----------- T\"{u}r --------------------------------------
\pstransTSK[translineK=false](1,0){1}{TL}{TL'}
\rput(TL'){%
\psscalebox{1}{%
\pscustom[fillstyle=solid,fillcolor=brown]{%
\psline(0.2,0)(-0.2,0)(-0.2,0.4)
\psarcn(0.2,0.4){0.4}{180}{120}
\psarcn(-0.2,0.4){0.4}{60}{0}
\closepath%
}
\psline[linewidth=0.5pt](0,0)(0,0.75)
\pscircle[linewidth=0.25pt](0.04,0.35){0.025}
\pscircle[linewidth=0.25pt](-0.04,0.35){0.025}
}}
%----------- T\"{u}r --------------------------------------
\rput(4,0){%
%\psscalebox{2}
{\psset{unit=2}%
\pscustom[fillstyle=solid,fillcolor=brown]{%
\psline(0.2,0)(-0.2,0)(-0.2,0.4)
\psarcn(0.2,0.4){0.4}{180}{120}
\psarcn(-0.2,0.4){0.4}{60}{0}
\closepath%
}
\psline[linewidth=0.5pt](0,0)(0,0.75)
\pscircle[linewidth=0.25pt](0.04,0.35){0.025}
\pscircle[linewidth=0.25pt](-0.04,0.35){0.025}
}}
%------- Uhr -------------------------
\rput(7,6){%
\psscalebox{1.5}{%
\pscircle[fillstyle=solid,fillcolor=lightgray!50](0,2.8){0.25}
\rput(0,2.8){%
\psline{c-c}(0,0)(0.14;50)
\psline{c-c}(0,0)(0.19;-30)
}
}}
%---------- Fenster -----------------------------------
\def\fenster{%
\pscustom[fillstyle=solid,fillcolor=white]{%
\psline(0.1,0)(-0.1,0)(-0.1,0.3)
\psarcn(0.1,0.3){0.2}{180}{120}
\psarcn(-0.1,0.3){0.2}{60}{0}
\closepath%
}}
\rput(3,2){%
\psscalebox{1.5}{\fenster}}
\rput(5,2){%
\psscalebox{1.5}{\fenster}}
%---------- Weg -----------------------------------------
\pstransTSK[translineK=false](3.5,0){-8}{W1}{W1'}
\pstransTSK[translineK=false](4.5,0){-8}{W2}{W2'}
\pspolygon[fillstyle=solid,fillcolor=gray!50,linestyle=none](W1)(W1')(W2')(W2)
{\psset{translineK=false,linestyle=none}
\multido{\i=1+1,\n=1+1}{8}{%
\pstransTSK(3.5,0){1 \i\space sub}{WM1a\i}{WM1a'\i}
\pstransTSK(3.5,0){0.5 \i\space sub}{WM1\i}{WM1'\i}
\pstransTSK(3.75,0){1 \i\space sub}{WM2a\i}{WM2a'\i}
\pstransTSK(3.75,0){0.7 \i\space sub}{WM2\i}{WM2'\i}
\pstransTSK(4.0,0){1 \i\space sub}{WM3a\i}{WM3a'\i}
\pstransTSK(4.0,0){0.5 \i\space sub}{WM3\i}{WM3'\i}
\pspolygon[fillstyle=solid,fillcolor=green!40,opacity=1](WM1a'\i)(WM1'\i)(WM2'\i)(WM2a'\i)
\pspolygon[fillstyle=solid,fillcolor=black!50,opacity=1](WM1'\i)(WM2'\i)(WM3'\i)
\pspolygon[fillstyle=solid,fillcolor=blue!40,opacity=1](WM2a'\i)(WM2'\i)(WM3'\i)(WM3a'\i)
\pstransTSK(4,0){0.5 \n\space sub}{WM4a\n}{WM4a'\n}
\pstransTSK(4,0){-\n}{WM4\n}{WM4'\n}
\pstransTSK(4.25,0){0.5 \n\space sub}{WM5a\n}{WM5a'\n}
\pstransTSK(4.25,0){.2 \n\space sub}{WM5\n}{WM5'\n}
\pstransTSK(4.5,0){0.5 \n\space sub}{WM6a\n}{WM6a'\n}
\pstransTSK(4.5,0){-\n}{WM6\n}{WM6'\n}
\pspolygon[fillstyle=solid,fillcolor=green!40,opacity=1](WM4a'\n)(WM4'\n)(WM5'\n)(WM5a'\n)
\pspolygon[fillstyle=solid,fillcolor=black!50,opacity=1](WM4'\n)(WM5'\n)(WM6'\n)
\pspolygon[fillstyle=solid,fillcolor=blue!40,opacity=1](WM5a'\n)(WM5'\n)(WM6'\n)(WM6a'\n)
}}
\end{pspicture}
}
\end{document}
lundi 3 mars 2014
Un package de Thomas Söll concernant la perspective cavalière : pst-perspective
Pour la perspective, on fixe l'angle des fuyantes et le coefficient de réduction. Ces deux paramètres fixés, on peut obtenir l'image d'un point et ensuite construire des figures. D'autres options sont prévues. Voici quelques images de la documentation. Celle-ci est rédigée en allemand, cependant une version anglaise est en préparation et peut-être que la version française sera mise en chantier prochainement.
Le package pst-perspective est disponible sur le serveur du CTAN :
Le package pst-perspective est disponible sur le serveur du CTAN :
dimanche 2 mars 2014
Représentation d’un ressort en pseudo-perspective
Le package pst-coil de Timothy Van Zandt (complété par les différents mainteneurs qui lui ont succédé) est en principe dédié à la représentation en perspective des ressorts et possède de nombreuses options. Cependant, malgré le nombre des options, celles-ci ne peuvent satisfaire entièrement les physiciens. En effet, les 2 options : coilwidth qui permet de fixer le diamètre du ressort et coilheight la distance entre deux spires – c’est à dire le pas de l’hélice, ne tiennent pas compte que si l’on modifie la longueur du ressort en le comprimant ou en l’étirant, le nombre de spires est toujours le même et que la distance entre les spires ainsi que le diamètre du ressort s’en trouvent modifiés.
La commande \psRessort[options](x1,y1)(x2,y2) permet de tenir compte du comportement physique d’un ressort.
La commande \psRessort[options](x1,y1)(x2,y2) permet de tenir compte du comportement physique d’un ressort.
Le package comprend les fichiers : pst-ressort.sty et pst-ressort.tex
La documentation comprend une animation réalisée avec le package animate d'Alexander Grahn.
L'ensemble est dans le dossier :
Inscription à :
Articles (Atom)