-
Notifications
You must be signed in to change notification settings - Fork 28
/
physics-poincare+diagram+foreach+set+command.tex
191 lines (174 loc) · 8.1 KB
/
physics-poincare+diagram+foreach+set+command.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
% http://www.texample.net/media/tikz/examples/TEX/poincare.tex
% Poincaré Diagram: Classification of Phase Portraits in the (det A,Tr A)-plane
% Author: Gernot Salzer, 22 Jan 2017
\documentclass[tikz,border=10pt]{standalone}
%%%<
\usepackage{verbatim}
%%%>
\begin{comment}
:Title: Poincare Diagram, Classification of Phase Portraits
:Features:
:Tags: Arcs;Foreach;Markings;Diagrams;Plots;Mathematics
:Author: Gernot Salzer
:Slug: poincare
The solutions of a system of linear differential equations can be
classified according to the trace and the determinant of the
coefficient matrix. This diagram show schematically the different
types of solutions.
Originally published on TeX.SX, tex.stackexchange.com/a/347401, 6 Jan 2017
Based on a manual drawing by Douglas R. Hundley,
http://people.whitman.edu/~hundledr/courses/M244/Poincare.pdf
You may use the code without any restrictions; no rights reserved.
\end{comment}
\usetikzlibrary{decorations.markings}
\tikzset
{every pin/.style = {pin edge = {<-}}, % pins are arrows from label to point
> = stealth, % arrow tips look like stealth bombers
flow/.style = % everything marked as "flow" will be decorated with an arrow
{decoration = {markings, mark=at position #1 with {\arrow{>}}},
postaction = {decorate}
},
flow/.default = 0.5, % default position of the arrow is in the middle
main/.style = {line width=1pt} % thick lines for main graph
}
% \newtemplate[Scaling, default 0.18]{\NameOfTemplate}{Caption}{Code}
%
% Typesets Code and stores it in the box \NameOfTemplate.
% This way we avoid nested tikzpictures when inserting the templates into the
% main picture, since nesting is not guaranteed to work.
\newcommand\newtemplate[4][0.18]%
{\newsavebox#2%
\savebox#2%
{\begin{tabular}{@{}c@{}}
\begin{tikzpicture}[scale=#1]
#4
\end{tikzpicture}\\[-1ex]
\templatecaption{#3}\\[-1ex]
\end{tabular}%
}%
}
\newcommand\template[1]{\usebox{#1}} % use the Code stored in box #1
\newcommand\templatecaption[1]{{\sffamily\scriptsize#1}} % typeset caption
\newcommand\Tr{\mathop{\mathrm{Tr}}}
\newtemplate\sink{sink}%
{\foreach \sx in {+,-} % for right/left half do:
{\draw[flow] (\sx4,0) -- (0,0); % draw half of horizontal axis
\draw[flow] (0,\sx4) -- (0,0); % draw half of vertical axis
\foreach \sy in {+,-} % for upper/lower quadrant do:
\foreach \a/\b in {2/1,3/0.44} % draw two half-parabolas
\draw[flow,domain=\sx\a:0] plot (\x, {\sy\b*\x*\x});
}
}
\newtemplate\source{source}%
{\foreach \sx in {+,-} % for right/left half do:
{\draw[flow] (0,0) -- (\sx4,0); % draw half of horizontal axis
\draw[flow] (0,0) -- (0,\sx4); % draw half of vertical axis
\foreach \sy in {+,-} % for upper/lower quadrant do:
\foreach \a/\b in {2/1,3/0.44} % draw two half-parabolas
\draw[flow,domain=0:\sx\a] plot (\x, {\sy\b*\x*\x});
}
}
\newtemplate\stablefp{line of stable fixed points}%
{\draw (-4,0) -- (4,0); % draw horizontal axis
\foreach \sy in {+,-} % for upper/lower half do:
{\draw[flow] (0,\sy4) -- (0,0); % draw half of vertical axis
\foreach \x in {-3,-2,-1,1,2,3} % draw six vertical half-lines
\draw[flow] (\x,\sy3) -- (\x,0);
}
}
\newtemplate\unstablefp{line of unstable fixed points}%
{\draw (-4,0) -- (4,0); % draw horizontal axis
\foreach \sy in {+,-} % for upper/lower half do:
{\draw[flow] (0,0) -- (0,\sy4); % draw half of vertical axis
\foreach \x in {-3,-2,-1,1,2,3} % draw six vertical half-lines
\draw[flow] (\x,0) -- (\x,\sy3);
}
}
\newtemplate\spiralsink{spiral sink}%
{\draw (-4,0) -- (4,0); % draw horizontal axis
\draw (0,-4) -- (0,4); % draw vertical axis
\draw [samples=100,smooth,domain=27:7] % draw spiral
plot ({\x r}:{0.005*\x*\x}); % Using "flow" here gives "Dimension
\def\x{26} % too large", so we draw a tiny
\draw[->] ({\x r}:{0.005*\x*\x}) -- +(0.01,-0.01);% tangent for the arrow.
}
\newtemplate\spiralsource{spiral source}%
{\draw (-4,0) -- (4,0); % draw horizontal axis
\draw (0,-4) -- (0,4); % draw vertical axis
\draw [samples=100,smooth,domain=10:28] % draw spiral
plot ({-\x r}:{0.005*\x*\x}); % Using "flow" here gives "Dimension
\def\x{27.5} % too large", so we draw a tiny
\draw[<-] ({-\x r}:{0.005*\x*\x}) -- +(0.01,-0.008);% tangent for the arrow.
}
\newtemplate[0.15]\centre{center}% British spelling since \center is in use
{\draw (-4,0) -- (4,0); % draw horizontal axis
\draw (0,-4) -- (0,4); % draw vertical axis
\foreach \r in {1,2,3} % draw three circles
\draw[flow=0.63] (\r,0) arc (0:-360:\r cm);
}
\newtemplate\saddle{saddle}%
{\foreach \sx in {+,-} % for right/left half do:
{\draw[flow] (\sx4,0) -- (0,0); % draw half of horizontal axis
\draw[flow] (0,0) -- (0,\sx4); % draw half of vertical axis
\foreach \sy in {+,-} % for upper/lower quadrant do:
\foreach \a/\b/\c/\d in {2.8/0.3/0.7/0.6, 3.9/0.4/1.3/1.1}
\draw[flow] (\sx\a,\sy\b) % draw two bent lines
.. controls (\sx\c,\sy\d) and (\sx\d,\sy\c)
.. (\sx\b,\sy\a);
}
}
\newtemplate\degensink{degenerate sink}%
{\draw (0,-4) -- (0,4); % draw vertical axis
\foreach \s in {+,-} % for upper/lower half do:
{\draw[flow] (\s4,0) -- (0,0); % draw half of horizontal axis
\foreach \a/\b/\c/\d in {3.5/4/1.5/1, 2.5/2/1/0.8}
\draw[flow] (\s-3.5,\s\a) % draw two bent lines
.. controls (\s\b,\s\c) and (\s\b,\s\d)
.. (0,0);
}
}
\newtemplate\degensource{degenerate source}%
{\draw (0,-4) -- (0,4); % draw vertical axis
\foreach \s in {+,-} % for upper/lower half do:
{\draw[flow] (0,0) -- (\s4,0); % draw half of horizontal axis
\foreach \a/\b/\c/\d in {3.5/4/1.5/1, 2.5/2/1/0.8}
\draw[flow] (0,0) % draw two bent lines
.. controls (\s\b,\s\d) and (\s\b,\s\c)
.. (\s-3.5,\s\a);
}
}
\begin{document}
\begin{tikzpicture}[line cap=round,line join=round]
% MAIN DIAGRAM
\draw [main,->] (0,-0.3) -- (0,4.7) % vertical axis
node [label={[above]$\scriptstyle\det A$}] {}
node [label={[above,yshift=0.8cm]%
{\sffamily\large Poincar\'e Diagram: Classification of Phase
Portraits in the $(\det A,\Tr A)$-plane}}] {};
\draw [main,->] (-5,0) -- (5,0) % horizontal axis
node [label={[right,yshift=-0.5ex]$\scriptstyle\Tr A$}] {};
\draw [main, domain=-4:4] plot (\x, {0.25*\x*\x}); % main graph
\node at (-4,4) [pin={[above]$\scriptstyle\Delta=0$}] {};
\node at ( 4,4) [pin={[above,align=left]%
{$\scriptstyle\Delta=0:\;\det A=\frac{1}{4}(\Tr A)^2$}}] {};
% TEMPLATES describing areas
\node at ( 0 ,-1.4) {\template\saddle};
\node at (-4 , 1 ) {\template\sink};
\node at ( 4 , 1 ) {\template\source};
\node at (-1.8, 3.7) {\template\spiralsink};
\node at ( 1.8, 3.7) {\template\spiralsource};
% TEMPLATES labeling lines and points
\node at ( 0 , 1.2) [pin={[draw,right,xshift=0.3cm]%
\template\centre}] {};
\node at (-3 , 0 ) [pin={[draw,below,yshift=-1cm]%
\template\stablefp}] {};
\node at ( 3 , 0 ) [pin={[draw,below,yshift=-1cm]%
\template\unstablefp}] {};
\node at (-3.5,{0.25*3.5*3.5}) [pin={[draw,left,xshift=-1.15cm,yshift=-0.3cm]%
\template\degensink}] {};
\node at ( 3.5,{0.25*3.5*3.5}) [pin={[draw,right,xshift=0.9cm,yshift=-0.3cm]%
\template\degensource}] {};
\node at ( 0 , 0 ) [pin={[draw,above left,align=center,xshift=-0.3cm]%
\templatecaption{uniform}\\[-1ex]\templatecaption{motion}}] {};
\end{tikzpicture}
\end{document}