aboutsummaryrefslogtreecommitdiffstats
path: root/buch/chapters/110-elliptisch/images
diff options
context:
space:
mode:
authorSamuel Niederer <43746162+samnied@users.noreply.github.com>2022-07-24 12:17:00 +0200
committerGitHub <noreply@github.com>2022-07-24 12:17:00 +0200
commitefe7c35759afb5cbae3c1683873c5159be0be09f (patch)
tree84f2e8510132352f9943bddc577ccf32cd46f2dc /buch/chapters/110-elliptisch/images
parentadd current work (diff)
parentMerge pull request #26 from p1mueller/master (diff)
downloadSeminarSpezielleFunktionen-efe7c35759afb5cbae3c1683873c5159be0be09f.tar.gz
SeminarSpezielleFunktionen-efe7c35759afb5cbae3c1683873c5159be0be09f.zip
Merge branch 'AndreasFMueller:master' into master
Diffstat (limited to 'buch/chapters/110-elliptisch/images')
-rw-r--r--buch/chapters/110-elliptisch/images/Makefile59
-rw-r--r--buch/chapters/110-elliptisch/images/ellall.pdfbin0 -> 22593 bytes
-rw-r--r--buch/chapters/110-elliptisch/images/ellall.tex215
-rw-r--r--buch/chapters/110-elliptisch/images/ellcommon.tex24
-rw-r--r--buch/chapters/110-elliptisch/images/ellpolnul.pdfbin0 -> 130369 bytes
-rw-r--r--buch/chapters/110-elliptisch/images/ellpolnul.tex69
-rw-r--r--buch/chapters/110-elliptisch/images/ellselection.pdfbin0 -> 165928 bytes
-rw-r--r--buch/chapters/110-elliptisch/images/ellselection.tex141
-rw-r--r--buch/chapters/110-elliptisch/images/jacobiplots.pdfbin57192 -> 56975 bytes
-rw-r--r--buch/chapters/110-elliptisch/images/jacobiplots.tex2
-rw-r--r--buch/chapters/110-elliptisch/images/kegelpara.pdfbin0 -> 202828 bytes
-rw-r--r--buch/chapters/110-elliptisch/images/kegelpara.pov329
-rw-r--r--buch/chapters/110-elliptisch/images/kegelpara.tex41
-rw-r--r--buch/chapters/110-elliptisch/images/lemniskate.pdfbin9914 -> 14339 bytes
-rw-r--r--buch/chapters/110-elliptisch/images/lemniskate.tex15
-rw-r--r--buch/chapters/110-elliptisch/images/lemnispara.cpp126
-rw-r--r--buch/chapters/110-elliptisch/images/lemnispara.pdfbin0 -> 25749 bytes
-rw-r--r--buch/chapters/110-elliptisch/images/lemnispara.tex94
-rw-r--r--buch/chapters/110-elliptisch/images/rechteck.cpp31
-rw-r--r--buch/chapters/110-elliptisch/images/rechteck.pdfbin91639 -> 94300 bytes
-rw-r--r--buch/chapters/110-elliptisch/images/rechteck.tex2
-rw-r--r--buch/chapters/110-elliptisch/images/slcl.cpp128
-rw-r--r--buch/chapters/110-elliptisch/images/slcl.pdfbin0 -> 31823 bytes
-rw-r--r--buch/chapters/110-elliptisch/images/slcl.tex88
-rw-r--r--buch/chapters/110-elliptisch/images/torusschnitt.pdfbin0 -> 312677 bytes
-rw-r--r--buch/chapters/110-elliptisch/images/torusschnitt.pov308
-rw-r--r--buch/chapters/110-elliptisch/images/torusschnitt.tex41
27 files changed, 1701 insertions, 12 deletions
diff --git a/buch/chapters/110-elliptisch/images/Makefile b/buch/chapters/110-elliptisch/images/Makefile
index 68322b6..7636e65 100644
--- a/buch/chapters/110-elliptisch/images/Makefile
+++ b/buch/chapters/110-elliptisch/images/Makefile
@@ -5,7 +5,8 @@
#
all: lemniskate.pdf ellipsenumfang.pdf unvollstaendig.pdf rechteck.pdf \
ellipse.pdf pendel.pdf jacobiplots.pdf jacobidef.pdf jacobi12.pdf \
- sncnlimit.pdf
+ sncnlimit.pdf slcl.pdf torusschnitt.pdf kegelpara.pdf lemnispara.pdf \
+ ellpolnul.pdf ellall.pdf ellselection.pdf
lemniskate.pdf: lemniskate.tex
pdflatex lemniskate.tex
@@ -71,3 +72,59 @@ jacobi12.pdf: jacobi12.tex
sncnlimit.pdf: sncnlimit.tex
pdflatex sncnlimit.tex
+slcl: slcl.cpp
+ g++ -O -Wall -std=c++11 slcl.cpp -o slcl `pkg-config --cflags gsl` `pkg-config --libs gsl`
+
+slcldata.tex: slcl
+ ./slcl --outfile=slcldata.tex --a=0 --b=13.4 --steps=200
+slcl.pdf: slcl.tex slcldata.tex
+ pdflatex slcl.tex
+
+KEGELSIZE = -W256 -H256
+KEGELSIZE = -W128 -H128
+KEGELSIZE = -W1080 -H1080
+kegelpara.png: kegelpara.pov
+ povray +A0.1 $(KEGELSIZE) -Okegelpara.png kegelpara.pov
+
+kegelpara.jpg: kegelpara.png Makefile
+ convert -extract 1080x1040+0+0 kegelpara.png \
+ -density 300 -units PixelsPerInch kegelpara.jpg
+
+kegelpara.pdf: kegelpara.tex kegelpara.jpg
+ pdflatex kegelpara.tex
+
+torusschnitt.png: torusschnitt.pov
+ povray +A0.1 -W1920 -H1080 -Otorusschnitt.png torusschnitt.pov
+
+torusschnitt.jpg: torusschnitt.png Makefile
+ convert -extract 1640x1080+140+0 torusschnitt.png \
+ -density 300 -units PixelsPerInch torusschnitt.jpg
+
+torusschnitt.pdf: torusschnitt.tex torusschnitt.jpg
+ pdflatex torusschnitt.tex
+
+lemnispara: lemnispara.cpp
+ g++ -O2 -Wall -g -o lemnispara `pkg-config --cflags gsl` \
+ lemnispara.cpp `pkg-config --libs gsl`
+
+lemnisparadata.tex: lemnispara
+ ./lemnispara
+
+lemnispara.pdf: lemnispara.tex lemnisparadata.tex
+ pdflatex lemnispara.tex
+
+ltest: lemnispara.pdf
+
+ellpolnul.pdf: ellpolnul.tex ellcommon.tex
+ pdflatex ellpolnul.tex
+ellall.pdf: ellall.tex ellcommon.tex
+ pdflatex ellall.tex
+
+rechteckpfade2.tex: rechteck Makefile
+ ./rechteck --outfile rechteckpfade2.tex --k 0.87 --vsteps=1
+ellselection.pdf: ellselection.tex rechteckpfade2.tex
+ pdflatex ellselection.tex
+
+rechteckpfade3.tex: rechteck
+ ./rechteck --outfile rechteckpfade3.tex --k 0.70710678118654752440 \
+ --vsteps=4
diff --git a/buch/chapters/110-elliptisch/images/ellall.pdf b/buch/chapters/110-elliptisch/images/ellall.pdf
new file mode 100644
index 0000000..fd0a5dd
--- /dev/null
+++ b/buch/chapters/110-elliptisch/images/ellall.pdf
Binary files differ
diff --git a/buch/chapters/110-elliptisch/images/ellall.tex b/buch/chapters/110-elliptisch/images/ellall.tex
new file mode 100644
index 0000000..b37fe12
--- /dev/null
+++ b/buch/chapters/110-elliptisch/images/ellall.tex
@@ -0,0 +1,215 @@
+%
+% ellpolnul.tex -- template for standalon tikz images
+%
+% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\documentclass[tikz]{standalone}
+\usepackage{amsmath}
+\usepackage{times}
+\usepackage{txfonts}
+\usepackage{pgfplots}
+\usepackage{csvsimple}
+\usetikzlibrary{arrows,intersections,math,calc}
+\begin{document}
+\input{ellcommon.tex}
+\def\skala{1}
+\begin{tikzpicture}[>=latex,thick,scale=\skala]
+
+%\draw (-1,-1) rectangle (1,1);
+%\node at (-1,-1) [below left] {$0$};
+%\node at (1,-1) [below right] {$K$};
+%\node at (1,1) [above right] {$K+iK'$};
+%\node at (-1,1) [above left] {$iK'$};
+%\node at (0,0) {$u$};
+
+\fill[color=rot!10,opacity=0.5] (-5.5,-4.3) rectangle (7.3,-1.7);
+\fill[color=blau!10,opacity=0.5] (-5.5,-7.3) rectangle (7.3,-4.7);
+\fill[color=gruen!10,opacity=0.5] (-5.5,-10.3) rectangle (7.3,-7.7);
+
+\fill[color=rot!10,opacity=0.5] (-1.3,-10.5) rectangle (1.3,2.5);
+\fill[color=blau!10,opacity=0.5] (1.7,-10.5) rectangle (4.3,2.5);
+\fill[color=gruen!10,opacity=0.5] (4.7,-10.5) rectangle (7.3,2.5);
+
+\begin{scope}[xshift=1.5cm,yshift=2cm]
+\node at (0,0) {Zähler};
+\draw[<-] (-4.5,0) -- (-1,0);
+\draw[->] (1,0) -- (4.5,0);
+\node[color=black] at (-4.5,-0.4) {\Large n};
+\node[color=rot] at (-1.5,-0.4) {\Large s};
+\node[color=blau] at (1.5,-0.4) {\Large c};
+\node[color=gruen] at (4.5,-0.4) {\Large d};
+\end{scope}
+
+\begin{scope}[xshift=-5.1cm,yshift=-4.5cm]
+\node at (0,0) [rotate=90] {Nenner};
+\draw[<-] (0,-4.5) -- (0,-1);
+\draw[->] (0,1) -- (0,4.5);
+\node[color=gruen] at (0.4,-4.5) [rotate=90] {\Large d};
+\node[color=blau] at (0.4,-1.5) [rotate=90] {\Large c};
+\node[color=rot] at (0.4,1.5) [rotate=90] {\Large s};
+\node[color=black] at (0.4,4.5) [rotate=90] {\Large n};
+\end{scope}
+
+\begin{scope}[xshift=-3cm,yshift=0cm]
+\node at (0,0) {$1$};
+\draw[color=gray!20] (-1,-1) rectangle (1,1);
+\end{scope}
+
+\definecolor{sccolor}{rgb}{0.8,0.0,1.0}
+\definecolor{sdcolor}{rgb}{0.6,0.6,0.0}
+\definecolor{cdcolor}{rgb}{0.0,0.6,1.0}
+
+\begin{scope}[xshift=0cm]
+\rechteck{rot}{\operatorname{sn}(u,k)}
+\nullstelle{(-1,-1)}{rot}
+\pol{(-1,1)}{rot}
+\node at (-1,-1) {$0$};
+\node at (1,-1) {$1$};
+\node at (1,1) {$\frac1k$};
+\node at (-1,1) {$\infty$};
+\end{scope}
+
+\begin{scope}[xshift=3cm]
+\rechteck{blau}{\operatorname{cn}(u,k)}
+\nullstelle{(1,-1)}{blau}
+\pol{(-1,1)}{blau}
+\node at (-1,-1) {$1$};
+\node at (1,-1) {$0$};
+\node at (1,1) {$\frac{k'}{ik}$};
+\node at (-1,1) {$\infty$};
+\end{scope}
+
+\begin{scope}[xshift=6cm]
+\rechteck{gruen}{\operatorname{dn}(u,k)}
+\nullstelle{(1,1)}{gruen}
+\pol{(-1,1)}{gruen}
+\node at (-1,-1) {$1$};
+\node at (1,-1) {$k'$};
+\node at (1,1) {$0$};
+\node at (-1,1) {$\infty$};
+\end{scope}
+
+%
+% start row with denominator sn(u,k)
+%
+
+\begin{scope}[xshift=-3cm,yshift=-3cm]
+\rechteck{rot}{\operatorname{ns}(u,k)}
+\pol{(-1,-1)}{rot}
+\nullstelle{(-1,1)}{rot}
+\node at (-1,-1) {$\infty$};
+\node at (1,-1) {$1$};
+\node at (1,1) {$k$};
+\node at (-1,1) {$0$};
+\end{scope}
+
+\begin{scope}[xshift=0cm,yshift=-3cm]
+%\rechteck{gray}{1}
+\fill[color=white] (-1,-1) rectangle (1,1);
+\node[color=gray] at (0,0) {$1$};
+\end{scope}
+
+\begin{scope}[xshift=3cm,yshift=-3cm]
+\rechteck{sccolor}{\operatorname{cs}(u,k)}
+\pol{(-1,-1)}{sccolor}
+\nullstelle{(1,-1)}{sccolor}
+\node at (-1,-1) {$\infty$};
+\node at (1,-1) {$0$};
+\node at (1,1) {$\frac{k'}{i}$};
+\node at (-1,1) {$ $};
+\end{scope}
+
+\begin{scope}[xshift=6cm,yshift=-3cm]
+\rechteck{sdcolor}{\operatorname{ds}(u,k)}
+\pol{(-1,-1)}{sdcolor}
+\nullstelle{(1,1)}{sdcolor}
+\node at (-1,-1) {$\infty$};
+\node at (1,-1) {$k'$};
+\node at (1,1) {$0$};
+\node at (-1,1) {$ $};
+\end{scope}
+
+%
+% start row with denominator cn(u,k)
+%
+
+\begin{scope}[xshift=-3cm,yshift=-6cm]
+\rechteck{blau}{\operatorname{nc}(u,k)}
+\pol{(1,-1)}{blau}
+\nullstelle{(-1,1)}{blau}
+\node at (-1,-1) {$1$};
+\node at (-1,1) {$0$};
+\node at (1,-1) {$\infty$};
+\node at (1,1) {$\frac{ik}{k'}$};
+\end{scope}
+
+\begin{scope}[xshift=0cm,yshift=-6cm]
+\rechteck{sccolor}{\operatorname{sc}(u,k)}
+\nullstelle{(-1,-1)}{sccolor}
+\pol{(1,-1)}{sccolor}
+\node at (-1,-1) {$0$};
+\node at (1,-1) {$\infty$};
+\node at (-1,1) {$ $};
+\node at (1,1) {$\frac{i}{k'}$};
+\end{scope}
+
+\begin{scope}[xshift=3cm,yshift=-6cm]
+%\rechteck{gray}{1}
+\fill[color=white] (-1,-1) rectangle (1,1);
+\node[color=gray] at (0,0) {$1$};
+\end{scope}
+
+\begin{scope}[xshift=6cm,yshift=-6cm]
+\rechteck{cdcolor}{\operatorname{dc}(u,k)}
+\nullstelle{(1,1)}{cdcolor}
+\pol{(1,-1)}{cdcolor}
+\node at (-1,-1) {$1$};
+\node at (1,-1) {$\infty$};
+\node at (-1,1) {$k$};
+\node at (1,1) {$0$};
+\end{scope}
+
+%
+% start row with denominator dn(u,k)
+%
+
+\begin{scope}[xshift=-3cm,yshift=-9cm]
+\rechteck{gruen}{\operatorname{nd}(u,k)}
+\pol{(1,1)}{gruen}
+\nullstelle{(-1,1)}{gruen}
+\node at (-1,-1) {$1$};
+\node at (-1,1) {$0$};
+\node at (1,-1) {$\frac{1}{k'}$};
+\node at (1,1) {$\infty$};
+\end{scope}
+
+\begin{scope}[xshift=0cm,yshift=-9cm]
+\rechteck{sdcolor}{\operatorname{sd}(u,k)}
+\nullstelle{(-1,-1)}{sdcolor}
+\pol{(1,1)}{sdcolor}
+\node at (-1,-1) {$0$};
+\node at (1,-1) {$\frac{1}{k'}$};
+\node at (-1,1) {$ $};
+\node at (1,1) {$\infty$};
+\end{scope}
+
+\begin{scope}[xshift=3cm,yshift=-9cm]
+\rechteck{cdcolor}{\operatorname{cd}(u,k)}
+\pol{(1,1)}{cdcolor}
+\nullstelle{(1,-1)}{cdcolor}
+\node at (-1,-1) {$1$};
+\node at (-1,1) {$\frac1k $};
+\node at (1,-1) {$0$};
+\node at (1,1) {$\infty$};
+\end{scope}
+
+\begin{scope}[xshift=6cm,yshift=-9cm]
+%\rechteck{gray}{1}
+\fill[color=white] (-1,-1) rectangle (1,1);
+\node[color=gray] at (0,0) {$1$};
+\end{scope}
+
+
+\end{tikzpicture}
+\end{document}
+
diff --git a/buch/chapters/110-elliptisch/images/ellcommon.tex b/buch/chapters/110-elliptisch/images/ellcommon.tex
new file mode 100644
index 0000000..cd3245d
--- /dev/null
+++ b/buch/chapters/110-elliptisch/images/ellcommon.tex
@@ -0,0 +1,24 @@
+%
+% ellcommon.tex -- common macros/definitions for elliptic function
+% values display
+%
+% (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\definecolor{rot}{rgb}{0.8,0,0}
+\definecolor{blau}{rgb}{0,0,1}
+\definecolor{gruen}{rgb}{0,0.6,0}
+\def\l{0.2}
+
+\def\pol#1#2{
+ \draw[color=#2!50,line width=3.0pt]
+ ($#1+(-\l,-\l)$) -- ($#1+(\l,\l)$);
+ \draw[color=#2!50,line width=3.0pt]
+ ($#1+(-\l,\l)$) -- ($#1+(\l,-\l)$);
+}
+\def\nullstelle#1#2{
+ \draw[color=#2!50,line width=3.0pt] #1 circle[radius=\l];
+}
+\def\rechteck#1#2{
+ \fill[color=#1!20] (-1,-1) rectangle (1,1);
+ \node[color=#1] at (0,0) {$#2\mathstrut$};
+}
diff --git a/buch/chapters/110-elliptisch/images/ellpolnul.pdf b/buch/chapters/110-elliptisch/images/ellpolnul.pdf
new file mode 100644
index 0000000..d798169
--- /dev/null
+++ b/buch/chapters/110-elliptisch/images/ellpolnul.pdf
Binary files differ
diff --git a/buch/chapters/110-elliptisch/images/ellpolnul.tex b/buch/chapters/110-elliptisch/images/ellpolnul.tex
new file mode 100644
index 0000000..dfa04d3
--- /dev/null
+++ b/buch/chapters/110-elliptisch/images/ellpolnul.tex
@@ -0,0 +1,69 @@
+%
+% ellpolnul.tex -- template for standalon tikz images
+%
+% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\documentclass[tikz]{standalone}
+\usepackage{amsmath}
+\usepackage{times}
+\usepackage{txfonts}
+\usepackage{pgfplots}
+\usepackage{csvsimple}
+\usetikzlibrary{arrows,intersections,math,calc}
+\begin{document}
+\input{ellcommon.tex}
+\def\skala{1}
+\begin{tikzpicture}[>=latex,thick,scale=\skala]
+
+\input rechteckpfade3.tex
+
+\pgfmathparse{2/\xmax}
+\xdef\dx{\pgfmathresult}
+\xdef\dy{\dx}
+
+\begin{scope}[xshift=-1cm,yshift=-1cm]
+\clip (0,0) rectangle (2,2);
+\netz{0.4pt}
+\draw[line width=0.4pt] (-1,0) -- (1,0);
+\end{scope}
+\fill[color=white,opacity=0.7] (-1,-1) rectangle (1,1);
+\draw (-1,-1) rectangle (1,1);
+\node at (-1,-1) [below left] {$0$};
+\node at (1,-1) [below right] {$K$};
+\node at (1,1) [above right] {$K+iK'$};
+\node at (-1,1) [above left] {$iK'$};
+\node at (0,0) {$u$};
+
+\begin{scope}[xshift=4cm]
+\rechteck{rot}{\operatorname{sn}(u,k)}
+\nullstelle{(-1,-1)}{rot}
+\pol{(-1,1)}{rot}
+\node at (-1,-1) {$0$};
+\node at (1,-1) {$1$};
+\node at (1,1) {$\frac1k$};
+\node at (-1,1) {$\infty$};
+\end{scope}
+
+\begin{scope}[xshift=7cm]
+\rechteck{blau}{\operatorname{cn}(u,k)}
+\nullstelle{(1,-1)}{blau}
+\pol{(-1,1)}{blau}
+\node at (-1,-1) {$1$};
+\node at (1,-1) {$0$};
+\node at (1,1) {$\frac{k'}{ik}$};
+\node at (-1,1) {$\infty$};
+\end{scope}
+
+\begin{scope}[xshift=10cm]
+\rechteck{gruen}{\operatorname{dn}(u,k)}
+\nullstelle{(1,1)}{gruen}
+\pol{(-1,1)}{gruen}
+\node at (-1,-1) {$1$};
+\node at (1,-1) {$k'$};
+\node at (1,1) {$0$};
+\node at (-1,1) {$\infty$};
+\end{scope}
+
+\end{tikzpicture}
+\end{document}
+
diff --git a/buch/chapters/110-elliptisch/images/ellselection.pdf b/buch/chapters/110-elliptisch/images/ellselection.pdf
new file mode 100644
index 0000000..7c98db1
--- /dev/null
+++ b/buch/chapters/110-elliptisch/images/ellselection.pdf
Binary files differ
diff --git a/buch/chapters/110-elliptisch/images/ellselection.tex b/buch/chapters/110-elliptisch/images/ellselection.tex
new file mode 100644
index 0000000..d8afeb1
--- /dev/null
+++ b/buch/chapters/110-elliptisch/images/ellselection.tex
@@ -0,0 +1,141 @@
+%
+% ellselection.tex -- Wahl einer elliptischen Funktion
+%
+% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\documentclass[tikz]{standalone}
+\usepackage{amsmath}
+\usepackage{times}
+\usepackage{txfonts}
+\usepackage{pgfplots}
+\usepackage{csvsimple}
+\usetikzlibrary{arrows,intersections,math}
+\begin{document}
+\def\skala{1}
+\begin{tikzpicture}[>=latex,thick,scale=\skala]
+
+\input{rechteckpfade2.tex}
+
+\def\l{0.45}
+\pgfmathparse{\l*72/2.54}
+\xdef\L{\pgfmathresult}
+
+\pgfmathparse{4.1/\xmax}
+\xdef\dx{\pgfmathresult}
+\xdef\dy{\dx}
+
+\def\sx{4.1}
+\pgfmathparse{\sx*72/2.54}
+\xdef\Sx{\pgfmathresult}
+
+\pgfmathparse{\dx*\ymax}
+\xdef\sy{\pgfmathresult}
+\pgfmathparse{\sy*72/2.54}
+\xdef\Sy{\pgfmathresult}
+
+\pgfmathparse{\sx/2-\l}
+\xdef\linksx{\pgfmathresult}
+\pgfmathparse{\sy/2-\l}
+\xdef\linksy{\pgfmathresult}
+
+\pgfmathparse{\sx/2+2*\l}
+\xdef\rechtsx{\pgfmathresult}
+\pgfmathparse{\sy/2}
+\xdef\rechtsy{\pgfmathresult}
+
+\begin{scope}
+ \clip (-\sx,-\sy) rectangle (\sx,\sy);
+ \begin{scope}[xshift={-\Sx}]
+ \hintergrund
+ \netz{0.7pt}
+ \end{scope}
+ \begin{scope}[xshift={\Sx}]
+ \hintergrund
+ \netz{0.7pt}
+ \end{scope}
+\end{scope}
+
+\fill[color=red!14,opacity=0.7] ({-\sx},0) rectangle (\sx,\sy);
+\fill[color=blue!14,opacity=0.7] ({-\sx},{-\sy}) rectangle (\sx,0);
+\fill[color=yellow!40,opacity=0.5] (0,0) rectangle (\sx,\sy);
+
+\draw (-\sx,-\sy) rectangle (\sx,\sy);
+
+\draw[->] ({-1.4*\sx},0) -- ({1.4*\sx},0) coordinate[label={$\Re u$}];
+\draw[->] (0,{-\sy-1}) -- (0,{\sy+1}) coordinate[label={right:$\Im u$}];
+
+\definecolor{darkgreen}{rgb}{0,0.6,0}
+
+\draw[->,line width=1.9pt,color=darkgreen]
+ (\sx,0) to[out=180,in=-79] (\linksx,\linksy);
+\draw[->,line width=1.9pt,color=darkgreen]
+ (\sx,{\sy-\l}) to[out=-90,in=0] (\rechtsx,\rechtsy);
+
+\def\rect#1#2{
+ \fill[color=white] (-\l,-\l) rectangle (\l,\l);
+ #2
+ \draw (-\l,-\l) rectangle (\l,\l);
+ \node at (0,0) {\Huge #1\strut};
+}
+
+\def\kreuz{
+ \begin{scope}
+ \clip ({-\l},{-\l}) rectangle ({\l},{\l});
+ \fill[color=white] ({-2*\l},{-2*\l}) rectangle ({2*\l},{2*\l});
+ \draw[color=darkgreen!30,line width=3pt] (-\l,-\l) -- (\l,\l);
+ \draw[color=darkgreen!30,line width=3pt] (-\l,\l) -- (\l,-\l);
+ \end{scope}
+}
+
+\def\kreis{
+ \begin{scope}
+ \clip ({-\l},{-\l}) rectangle ({\l},{\l});
+ \fill[color=white] ({-2*\l},{-2*\l}) rectangle ({2*\l},{2*\l});
+ \draw[color=darkgreen!30,line width=3pt]
+ (0,0) circle[radius={\l*(\L-1.5)/\L}];
+ \end{scope}
+}
+
+\begin{scope}[xshift={0},yshift={0}]
+ \rect{s}{}
+\end{scope}
+
+\begin{scope}[xshift={\Sx},yshift={0}]
+ \rect{c}{\kreis}
+\end{scope}
+
+\begin{scope}[xshift={\Sx},yshift={\Sy}]
+ \rect{d}{\kreuz}
+\end{scope}
+
+\begin{scope}[xshift={0},yshift={\Sy}]
+ \rect{n}{}
+\end{scope}
+
+\node at ({-\l+0.1},{\sy+\l-0.1}) [above left] {$iK'\mathstrut$};
+\node at ({-\l+0.1},{-\l+0.1}) [below left] {$0\mathstrut$};
+\node at ({\sx+\l-0.1},{-\l+0.1}) [below right] {$K\mathstrut$};
+\node at ({\sx+\l-0.1},{\sy+\l-0.1}) [above right] {$K+iK'\mathstrut$};
+\node at ({-\sx},0) [below left] {$-K\mathstrut$};
+\node at (0,{-\sy+0.05}) [below left] {$-iK'\mathstrut$};
+\node at ({\sx-0.1},{-\sy+0.1}) [below right] {$K-iK'\mathstrut$};
+\node at ({-\sx+0.1},{-\sy+0.1}) [below left] {$-K-iK'\mathstrut$};
+\node at ({-\sx+0.1},{\sy-0.1}) [above left] {$-K+iK'\mathstrut$};
+
+\begin{scope}[xshift={-\L+0.5*\Sx},yshift={0.5*\Sy}]
+ \node at ({-\l},{\l-0.1}) [above] {Nullstelle\strut};
+ \kreis
+ \node[color=darkgreen] at (0,0) {\Huge c\strut};
+ \draw[line width=0.2pt] (-\l,-\l) rectangle (\l,\l);
+\end{scope}
+
+\begin{scope}[xshift={\L+0.5*\Sx},yshift={0.5*\Sy}]
+ \node at ({\l},{\l-0.1}) [above] {Pol\strut};
+ \kreuz
+ \node[color=darkgreen] at (0,0) {\Huge d\strut};
+ \draw[line width=0.2pt] (-\l,-\l) rectangle (\l,\l);
+\end{scope}
+
+\end{tikzpicture}
+\end{document}
+
diff --git a/buch/chapters/110-elliptisch/images/jacobiplots.pdf b/buch/chapters/110-elliptisch/images/jacobiplots.pdf
index d11bde8..eb9d7f1 100644
--- a/buch/chapters/110-elliptisch/images/jacobiplots.pdf
+++ b/buch/chapters/110-elliptisch/images/jacobiplots.pdf
Binary files differ
diff --git a/buch/chapters/110-elliptisch/images/jacobiplots.tex b/buch/chapters/110-elliptisch/images/jacobiplots.tex
index 4fc572e..fec04fc 100644
--- a/buch/chapters/110-elliptisch/images/jacobiplots.tex
+++ b/buch/chapters/110-elliptisch/images/jacobiplots.tex
@@ -31,7 +31,7 @@
\fill[color=gray!50] (-0.2,1.65) rectangle (7.0,2.3);
\draw[line width=0.5pt] (-0.2,-6) rectangle (7.0,2.3);
\begin{scope}[scale=0.5]
-\node at (6.5,{\dy+2}) {$m = #1$};
+\node at (6.5,{\dy+2}) {$k^2 = #1$};
\end{scope}
}
\def\jacobiplot#1#2#3#4{
diff --git a/buch/chapters/110-elliptisch/images/kegelpara.pdf b/buch/chapters/110-elliptisch/images/kegelpara.pdf
new file mode 100644
index 0000000..2bbd428
--- /dev/null
+++ b/buch/chapters/110-elliptisch/images/kegelpara.pdf
Binary files differ
diff --git a/buch/chapters/110-elliptisch/images/kegelpara.pov b/buch/chapters/110-elliptisch/images/kegelpara.pov
new file mode 100644
index 0000000..13b66cc
--- /dev/null
+++ b/buch/chapters/110-elliptisch/images/kegelpara.pov
@@ -0,0 +1,329 @@
+//
+// kegelpara.pov
+//
+// (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+//
+#version 3.7;
+#include "colors.inc"
+
+#declare O = <0,0,0>;
+
+global_settings {
+ assumed_gamma 1
+}
+
+#declare imagescale = 0.08;
+
+camera {
+ location <28, 20, -40>
+ look_at <0, 0.1, 0>
+ right x * imagescale
+ up y * imagescale
+}
+
+light_source {
+ <30, 10, -40> color White
+ area_light <1,0,0> <0,0,1>, 10, 10
+ adaptive 1
+ jitter
+}
+
+sky_sphere {
+ pigment {
+ color rgb<1,1,1>
+ }
+}
+
+
+//
+// draw an arrow from <from> to <to> with thickness <arrowthickness> with
+// color <c>
+//
+#macro arrow(from, to, arrowthickness, c)
+#declare arrowdirection = vnormalize(to - from);
+#declare arrowlength = vlength(to - from);
+union {
+ sphere {
+ from, 1.1 * arrowthickness
+ }
+ cylinder {
+ from,
+ from + (arrowlength - 5 * arrowthickness) * arrowdirection,
+ arrowthickness
+ }
+ cone {
+ from + (arrowlength - 5 * arrowthickness) * arrowdirection,
+ 2 * arrowthickness,
+ to,
+ 0
+ }
+ pigment {
+ color c
+ }
+ finish {
+ specular 0.9
+ metallic
+ }
+}
+#end
+
+arrow(<-2.6,0,0>,<2.5,0,0>,0.02,White)
+arrow(<0,-2,0>,<0,2.3,0>,0.02,White)
+arrow(<0,0,-3.2>,<0,0,3.7>,0.02,White)
+
+#declare epsilon = 0.0001;
+#declare l = 1.5;
+
+#macro Kegel(farbe)
+union {
+ difference {
+ cone { O, 0, <l, 0, 0>, l }
+ cone { O + <epsilon, 0,0>, 0, <l+epsilon, 0, 0>, l }
+ }
+ difference {
+ cone { O, 0, <-l, 0, 0>, l }
+ cone { O + <-epsilon, 0, 0>, 0, <-l-epsilon, 0, 0>, l }
+ }
+ pigment {
+ color farbe
+ }
+ finish {
+ specular 0.9
+ metallic
+ }
+}
+#end
+
+#macro Kegelpunkt(xx, phi)
+ < xx, xx * sin(phi), xx * cos(phi) >
+#end
+
+#macro Kegelgitter(farbe, r)
+union {
+ #declare s = 0;
+ #declare smax = 2 * pi;
+ #declare sstep = pi / 6;
+ #while (s < smax - sstep/2)
+ cylinder { Kegelpunkt(l, s), Kegelpunkt(-l, s), r }
+ #declare s = s + sstep;
+ #end
+ #declare phimax = 2 * pi;
+ #declare phisteps = 100;
+ #declare phistep = phimax / phisteps;
+ #declare xxstep = 0.5;
+ #declare xxmax = 2;
+ #declare xx = xxstep;
+ #while (xx < xxmax - xxstep/2)
+ #declare phi = 0;
+ #while (phi < phimax - phistep/2)
+ cylinder {
+ Kegelpunkt(xx, phi),
+ Kegelpunkt(xx, phi + phistep),
+ r
+ }
+ sphere { Kegelpunkt(xx, phi), r }
+ cylinder {
+ Kegelpunkt(-xx, phi),
+ Kegelpunkt(-xx, phi + phistep),
+ r
+ }
+ sphere { Kegelpunkt(-xx, phi), r }
+ #declare phi = phi + phistep;
+ #end
+ #declare xx = xx + xxstep;
+ #end
+ pigment {
+ color farbe
+ }
+ finish {
+ specular 0.9
+ metallic
+ }
+}
+#end
+
+#macro F(w, r)
+ <r * cos(w), r * r/sqrt(2), r * sin(w) >
+#end
+
+#macro Paraboloid(farbe)
+mesh {
+ #declare phi = 0;
+ #declare phimax = 2 * pi;
+ #declare phisteps = 100;
+ #declare phistep = pi / phisteps;
+ #declare rsteps = 100;
+ #declare rmax = 1.5;
+ #declare rstep = rmax / rsteps;
+ #while (phi < phimax - phistep/2)
+ #declare r = rstep;
+ #declare h = r * r / sqrt(2);
+ triangle {
+ O, F(phi, r), F(phi + phistep, r)
+ }
+ #while (r < rmax - rstep/2)
+ // ring
+ triangle {
+ F(phi, r),
+ F(phi + phistep, r),
+ F(phi + phistep, r + rstep)
+ }
+ triangle {
+ F(phi, r),
+ F(phi + phistep, r + rstep),
+ F(phi, r + rstep)
+ }
+ #declare r = r + rstep;
+ #end
+ #declare phi = phi + phistep;
+ #end
+ pigment {
+ color farbe
+ }
+ finish {
+ specular 0.9
+ metallic
+ }
+}
+#end
+
+#macro Paraboloidgitter(farbe, gr)
+union {
+ #declare phi = 0;
+ #declare phimax = 2 * pi;
+ #declare phistep = pi / 6;
+
+ #declare rmax = 1.5;
+ #declare rsteps = 100;
+ #declare rstep = rmax / rsteps;
+
+ #while (phi < phimax - phistep/2)
+ #declare r = rstep;
+ #while (r < rmax - rstep/2)
+ cylinder { F(phi, r), F(phi, r + rstep), gr }
+ sphere { F(phi, r), gr }
+ #declare r = r + rstep;
+ #end
+ #declare phi = phi + phistep;
+ #end
+
+ #declare rstep = 0.2;
+ #declare r = rstep;
+
+ #declare phisteps = 100;
+ #declare phistep = phimax / phisteps;
+ #while (r < rmax)
+ #declare phi = 0;
+ #while (phi < phimax - phistep/2)
+ cylinder { F(phi, r), F(phi + phistep, r), gr }
+ sphere { F(phi, r), gr }
+ #declare phi = phi + phistep;
+ #end
+ #declare r = r + rstep;
+ #end
+ pigment {
+ color farbe
+ }
+ finish {
+ specular 0.9
+ metallic
+ }
+}
+#end
+
+#declare a = sqrt(2);
+#macro G(phi,sg)
+ < a*sg*sqrt(cos(2*phi))*cos(phi), a*cos(2*phi), a*sqrt(cos(2*phi))*sin(phi)>
+#end
+
+#macro Lemniskate3D(s, farbe)
+union {
+ #declare phi = -pi / 4;
+ #declare phimax = pi / 4;
+ #declare phisteps = 100;
+ #declare phistep = phimax / phisteps;
+ #while (phi < phimax - phistep/2)
+ sphere { G(phi,1), s }
+ cylinder { G(phi,1), G(phi+phistep,1), s }
+ sphere { G(phi,-1), s }
+ cylinder { G(phi,-1), G(phi+phistep,-1), s }
+ #declare phi = phi + phistep;
+ #end
+ pigment {
+ color farbe
+ }
+ finish {
+ specular 0.9
+ metallic
+ }
+}
+#end
+
+#declare a = sqrt(2);
+#macro G2(phi,sg)
+ a * sqrt(cos(2*phi)) * < sg * cos(phi), 0, sin(phi)>
+#end
+
+#macro Lemniskate(s, farbe)
+union {
+ #declare phi = -pi / 4;
+ #declare phimax = pi / 4;
+ #declare phisteps = 100;
+ #declare phistep = phimax / phisteps;
+ #while (phi < phimax - phistep/2)
+ sphere { G2(phi,1), s }
+ cylinder { G2(phi,1), G2(phi+phistep,1), s }
+ sphere { G2(phi,-1), s }
+ cylinder { G2(phi,-1), G2(phi+phistep,-1), s }
+ #declare phi = phi + phistep;
+ #end
+ pigment {
+ color farbe
+ }
+ finish {
+ specular 0.9
+ metallic
+ }
+}
+#end
+
+#macro Projektion(s, farbe)
+union {
+ #declare phistep = pi / 16;
+ #declare phi = -pi / 4 + phistep;
+ #declare phimax = pi / 4;
+ #while (phi < phimax - phistep/2)
+ cylinder { G(phi, 1), G2(phi, 1), s }
+ cylinder { G(phi, -1), G2(phi, -1), s }
+ #declare phi = phi + phistep;
+ #end
+ pigment {
+ color farbe
+ }
+ finish {
+ specular 0.9
+ metallic
+ }
+}
+#end
+
+#declare kegelfarbe = rgbf<0.2,0.6,0.2,0.2>;
+#declare kegelgitterfarbe = rgb<0.2,0.8,0.2>;
+#declare paraboloidfarbe = rgbf<0.2,0.6,1.0,0.2>;
+#declare paraboloidgitterfarbe = rgb<0.4,1,1>;
+
+//intersection {
+// union {
+ Paraboloid(paraboloidfarbe)
+ Paraboloidgitter(paraboloidgitterfarbe, 0.004)
+
+ Kegel(kegelfarbe)
+ Kegelgitter(kegelgitterfarbe, 0.004)
+// }
+// plane { <0, 0, -1>, 0.6 }
+//}
+
+
+Lemniskate3D(0.02, rgb<0.8,0.0,0.8>)
+Lemniskate(0.02, Red)
+Projektion(0.01, Yellow)
diff --git a/buch/chapters/110-elliptisch/images/kegelpara.tex b/buch/chapters/110-elliptisch/images/kegelpara.tex
new file mode 100644
index 0000000..8fcefbf
--- /dev/null
+++ b/buch/chapters/110-elliptisch/images/kegelpara.tex
@@ -0,0 +1,41 @@
+%
+% kegelpara.tex
+%
+% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\documentclass[tikz]{standalone}
+\usepackage{times}
+\usepackage{amsmath}
+\usepackage{txfonts}
+\usepackage[utf8]{inputenc}
+\usepackage{graphics}
+\usetikzlibrary{arrows,intersections,math}
+\usepackage{ifthen}
+\begin{document}
+
+\newboolean{showgrid}
+\setboolean{showgrid}{false}
+\def\breite{4}
+\def\hoehe{4}
+
+\begin{tikzpicture}[>=latex,thick]
+
+% Povray Bild
+\node at (0,0) {\includegraphics[width=8cm]{kegelpara.jpg}};
+
+% Gitter
+\ifthenelse{\boolean{showgrid}}{
+\draw[step=0.1,line width=0.1pt] (-\breite,-\hoehe) grid (\breite, \hoehe);
+\draw[step=0.5,line width=0.4pt] (-\breite,-\hoehe) grid (\breite, \hoehe);
+\draw (-\breite,-\hoehe) grid (\breite, \hoehe);
+\fill (0,0) circle[radius=0.05];
+}{}
+
+\node at (4.1,-1.4) {$X$};
+\node at (0.2,3.8) {$Z$};
+\node at (4.0,1.8) {$Y$};
+
+\end{tikzpicture}
+
+\end{document}
+
diff --git a/buch/chapters/110-elliptisch/images/lemniskate.pdf b/buch/chapters/110-elliptisch/images/lemniskate.pdf
index 063a3e1..9e02c3c 100644
--- a/buch/chapters/110-elliptisch/images/lemniskate.pdf
+++ b/buch/chapters/110-elliptisch/images/lemniskate.pdf
Binary files differ
diff --git a/buch/chapters/110-elliptisch/images/lemniskate.tex b/buch/chapters/110-elliptisch/images/lemniskate.tex
index f74a81f..fe90631 100644
--- a/buch/chapters/110-elliptisch/images/lemniskate.tex
+++ b/buch/chapters/110-elliptisch/images/lemniskate.tex
@@ -27,13 +27,16 @@
\draw[color=red,line width=2.0pt]
plot[domain=45:\a,samples=100] ({\x}:{sqrt(2*cos(2*\x))});
-\draw[->] (-1.5,0) -- (1.5,0) coordinate[label={$x$}];
-\draw[->] (0,-0.7) -- (0,0.7) coordinate[label={right:$y$}];
+\draw[->] (-1.5,0) -- (1.7,0) coordinate[label={$X$}];
+\draw[->] (0,-0.7) -- (0,0.7) coordinate[label={right:$Y$}];
\fill[color=white] (1,0) circle[radius=0.02];
\draw (1,0) circle[radius=0.02];
+\node at ({1},0) [below] {$\displaystyle a\mathstrut$};
+
\fill[color=white] (-1,0) circle[radius=0.02];
\draw (-1,0) circle[radius=0.02];
+\node at ({-1},0) [below] {$\displaystyle\llap{$-$}a\mathstrut$};
\node[color=blue] at (\a:{0.6*sqrt(2*cos(2*\a))}) [below] {$r$};
\node[color=red] at ({\b}:{sqrt(2*cos(2*\b))}) [above] {$s$};
@@ -41,6 +44,14 @@
\fill[color=white] (\a:{sqrt(2*cos(2*\a))}) circle[radius=0.02];
\draw[color=red] (\a:{sqrt(2*cos(2*\a))}) circle[radius=0.02];
+\draw ({sqrt(2)},{-0.1/\skala}) -- ({sqrt(2)},{0.1/\skala});
+\node at ({sqrt(2)},0) [below right]
+ {$\displaystyle a\mathstrut\sqrt{2}$};
+\draw ({-sqrt(2)},{-0.1/\skala}) -- ({-sqrt(2)},{0.1/\skala});
+\node at ({-sqrt(2)},0) [below left]
+ {$\displaystyle -a\mathstrut\sqrt{2}$};
+
+
\end{tikzpicture}
\end{document}
diff --git a/buch/chapters/110-elliptisch/images/lemnispara.cpp b/buch/chapters/110-elliptisch/images/lemnispara.cpp
new file mode 100644
index 0000000..6f4d55d
--- /dev/null
+++ b/buch/chapters/110-elliptisch/images/lemnispara.cpp
@@ -0,0 +1,126 @@
+/*
+ * lemnispara.cpp -- Display parametrisation of the lemniskate
+ *
+ * (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+ */
+#include <cstdio>
+#include <cstdlib>
+#include <cmath>
+#include <gsl/gsl_sf_elljac.h>
+#include <iostream>
+#include <fstream>
+#include <map>
+#include <string.h>
+#include <string>
+
+const static double s = sqrt(2);
+const static double k = 1 / s;
+const static double m = k * k;
+
+typedef std::pair<double, double> point_t;
+
+point_t operator*(const point_t& p, double s) {
+ return point_t(s * p.first, s * p.second);
+}
+
+static double norm(const point_t& p) {
+ return hypot(p.first, p.second);
+}
+
+static point_t normalize(const point_t& p) {
+ return p * (1/norm(p));
+}
+
+static point_t normal(const point_t& p) {
+ return std::make_pair(p.second, -p.first);
+}
+
+class lemniscate : public point_t {
+ double sn, cn, dn;
+public:
+ lemniscate(double t) {
+ gsl_sf_elljac_e(t, m, &sn, &cn, &dn);
+ first = s * cn * dn;
+ second = cn * sn;
+ }
+ point_t tangent() const {
+ return std::make_pair(-s * sn * (1.5 - sn * sn),
+ dn * (1 - 2 * sn * sn));
+ }
+ point_t unittangent() const {
+ return normalize(tangent());
+ }
+ point_t normal() const {
+ return ::normal(tangent());
+ }
+ point_t unitnormal() const {
+ return ::normal(unittangent());
+ }
+};
+
+std::ostream& operator<<(std::ostream& out, const point_t& p) {
+ char b[1024];
+ snprintf(b, sizeof(b), "({%.4f*\\dx},{%.4f*\\dy})", p.first, p.second);
+ out << b;
+ return out;
+}
+
+int main(int argc, char *argv[]) {
+ std::ofstream out("lemnisparadata.tex");
+
+ // the curve
+ double tstep = 0.01;
+ double tmax = 4.05;
+ out << "\\def\\lemnispath{ ";
+ out << lemniscate(0);
+ for (double t = tstep; t < tmax; t += tstep) {
+ out << std::endl << "\t" << "-- " << lemniscate(t);
+ }
+ out << std::endl;
+ out << "}" << std::endl;
+
+ out << "\\def\\lemnispathmore{ ";
+ out << lemniscate(tmax);
+ double tmax2 = 7.5;
+ for (double t = tmax + tstep; t < tmax2; t += tstep) {
+ out << std::endl << "\t" << "-- " << lemniscate(t);
+ }
+ out << std::endl;
+ out << "}" << std::endl;
+
+ // individual points
+ tstep = 0.2;
+ int i = 0;
+ char name[3];
+ strcpy(name, "L0");
+ for (double t = 0; t <= tmax; t += tstep) {
+ char c = 'A' + i++;
+ char buffer[128];
+ lemniscate l(t);
+ name[0] = 'L';
+ name[1] = c;
+ out << "\\coordinate (" << name << ") at ";
+ out << l << ";" << std::endl;
+ name[0] = 'T';
+ out << "\\coordinate (" << name << ") at ";
+ out << l.unittangent() << ";" << std::endl;
+ name[0] = 'N';
+ out << "\\coordinate (" << name << ") at ";
+ out << l.unitnormal() << ";" << std::endl;
+ name[0] = 'C';
+ out << "\\def\\" << name << "{ ";
+ out << "\\node[color=red] at ($(L" << c << ")+0.06*(N" << c << ")$) ";
+ out << "[rotate={";
+ double w = 180 * atan2(l.unitnormal().second,
+ l.unitnormal().first) / M_PI;
+ snprintf(buffer, sizeof(buffer), "%.1f", w);
+ out << buffer;
+ out << "-90}]";
+ snprintf(buffer, sizeof(buffer), "%.1f", t);
+ out << " {$\\scriptstyle " << buffer << "$};" << std::endl;
+ out << "}" << std::endl;
+ }
+
+ out.close();
+ return EXIT_SUCCESS;
+}
diff --git a/buch/chapters/110-elliptisch/images/lemnispara.pdf b/buch/chapters/110-elliptisch/images/lemnispara.pdf
new file mode 100644
index 0000000..16731d3
--- /dev/null
+++ b/buch/chapters/110-elliptisch/images/lemnispara.pdf
Binary files differ
diff --git a/buch/chapters/110-elliptisch/images/lemnispara.tex b/buch/chapters/110-elliptisch/images/lemnispara.tex
new file mode 100644
index 0000000..c6e32d7
--- /dev/null
+++ b/buch/chapters/110-elliptisch/images/lemnispara.tex
@@ -0,0 +1,94 @@
+%
+% lemnispara.tex -- parametrization of the lemniscate
+%
+% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\documentclass[tikz]{standalone}
+\usepackage{amsmath}
+\usepackage{times}
+\usepackage{txfonts}
+\usepackage{pgfplots}
+\usepackage{csvsimple}
+\usetikzlibrary{arrows,intersections,math,calc}
+\begin{document}
+\def\skala{1}
+
+\begin{tikzpicture}[>=latex,thick,scale=\skala]
+\def\dx{4}
+\def\dy{4}
+\input{lemnisparadata.tex}
+
+% add image content here
+\draw[color=red!20,line width=1.4pt] \lemnispathmore;
+\draw[color=red,line width=1.4pt] \lemnispath;
+
+\draw[->] ({-1.6*\dx},0) -- ({1.8*\dx},0) coordinate[label={$X$}];
+\draw[->] (0,{-0.7*\dy}) -- (0,{0.7*\dy}) coordinate[label={right:$Y$}];
+
+\draw ({1.5*\dx},-0.05) -- ({1.5*\dx},0.05);
+\draw ({\dx},-0.05) -- ({\dx},0.05);
+\draw ({0.5*\dx},-0.05) -- ({0.5*\dx},0.05);
+\draw ({-0.5*\dx},-0.05) -- ({-0.5*\dx},0.05);
+\draw ({-\dx},-0.05) -- ({-\dx},0.05);
+\draw ({-1.5*\dx},-0.05) -- ({-1.5*\dx},0.05);
+\draw (-0.05,{0.5*\dy}) -- (0.05,{0.5*\dy});
+\draw (-0.05,{-0.5*\dy}) -- (0.05,{-0.5*\dy});
+
+\node at ({\dx},0) [above] {$1$};
+\node at ({-\dx},0) [above] {$-1$};
+\node at ({-0.5*\dx},0) [above] {$-\frac12$};
+\node at ({0.5*\dx},0) [above] {$\frac12$};
+\node at (0,{0.5*\dy}) [left] {$\frac12$};
+\node at (0,{-0.5*\dy}) [left] {$-\frac12$};
+
+\def\s{0.02}
+
+\draw[color=red] ($(LA)-\s*(NA)$) -- ($(LA)+\s*(NA)$);
+\draw[color=red] ($(LB)-\s*(NB)$) -- ($(LB)+\s*(NB)$);
+\draw[color=red] ($(LC)-\s*(NC)$) -- ($(LC)+\s*(NC)$);
+\draw[color=red] ($(LD)-\s*(ND)$) -- ($(LD)+\s*(ND)$);
+\draw[color=red] ($(LE)-\s*(NE)$) -- ($(LE)+\s*(NE)$);
+\draw[color=red] ($(LF)-\s*(NF)$) -- ($(LF)+\s*(NF)$);
+\draw[color=red] ($(LG)-\s*(NG)$) -- ($(LG)+\s*(NG)$);
+\draw[color=red] ($(LH)-\s*(NH)$) -- ($(LH)+\s*(NH)$);
+\draw[color=red] ($(LI)-\s*(NI)$) -- ($(LI)+\s*(NI)$);
+\draw[color=red] ($(LJ)-\s*(NJ)$) -- ($(LJ)+\s*(NJ)$);
+\draw[color=red] ($(LK)-\s*(NK)$) -- ($(LK)+\s*(NK)$);
+\draw[color=red] ($(LL)-\s*(NL)$) -- ($(LL)+\s*(NL)$);
+\draw[color=red] ($(LM)-\s*(NM)$) -- ($(LM)+\s*(NM)$);
+\draw[color=red] ($(LN)-\s*(NN)$) -- ($(LN)+\s*(NN)$);
+\draw[color=red] ($(LO)-\s*(NO)$) -- ($(LO)+\s*(NO)$);
+\draw[color=red] ($(LP)-\s*(NP)$) -- ($(LP)+\s*(NP)$);
+\draw[color=red] ($(LQ)-\s*(NQ)$) -- ($(LQ)+\s*(NQ)$);
+\draw[color=red] ($(LR)-\s*(NR)$) -- ($(LR)+\s*(NR)$);
+\draw[color=red] ($(LS)-\s*(NS)$) -- ($(LS)+\s*(NS)$);
+\draw[color=red] ($(LT)-\s*(NT)$) -- ($(LT)+\s*(NT)$);
+\draw[color=red] ($(LU)-\s*(NU)$) -- ($(LU)+\s*(NU)$);
+
+\CB
+\CC
+\CD
+\CE
+\CF
+\CG
+\CH
+\CI
+\CJ
+\CK
+\CL
+\CM
+\CN
+\CO
+\CP
+\CQ
+\CR
+\CS
+\CT
+\CU
+
+\fill[color=blue] (LA) circle[radius=0.07];
+\node[color=blue] at (LA) [above right] {$S$};
+
+\end{tikzpicture}
+\end{document}
+
diff --git a/buch/chapters/110-elliptisch/images/rechteck.cpp b/buch/chapters/110-elliptisch/images/rechteck.cpp
index c65ae0f..b5ad0ec 100644
--- a/buch/chapters/110-elliptisch/images/rechteck.cpp
+++ b/buch/chapters/110-elliptisch/images/rechteck.cpp
@@ -163,7 +163,7 @@ curvetracer::curve_t curvetracer::trace(const std::complex<double>& startz,
} catch (const toomanyiterations& x) {
std::cerr << "iterations exceeded after ";
std::cerr << result.size();
- std::cerr << " points";
+ std::cerr << " points" << std::endl;
maxsteps = 0;
}
}
@@ -230,7 +230,7 @@ void curvedrawer::operator()(const curvetracer::curve_t& curve) {
double first = true;
for (auto z : curve) {
if (first) {
- *_out << "\\draw[color=" << _color << "] ";
+ *_out << "\\draw[color=" << _color << ",line width=#1] ";
first = false;
} else {
*_out << std::endl << " -- ";
@@ -244,6 +244,7 @@ static struct option longopts[] = {
{ "outfile", required_argument, NULL, 'o' },
{ "k", required_argument, NULL, 'k' },
{ "deltax", required_argument, NULL, 'd' },
+{ "vsteps", required_argument, NULL, 'v' },
{ NULL, 0, NULL, 0 }
};
@@ -252,7 +253,8 @@ static struct option longopts[] = {
*/
int main(int argc, char *argv[]) {
double k = 0.625;
- double deltax = 0.2;
+ double Deltax = 0.2;
+ int vsteps = 4;
int c;
int longindex;
@@ -261,7 +263,7 @@ int main(int argc, char *argv[]) {
&longindex)))
switch (c) {
case 'd':
- deltax = std::stod(optarg);
+ Deltax = std::stod(optarg);
break;
case 'o':
outfilename = std::string(optarg);
@@ -269,6 +271,9 @@ int main(int argc, char *argv[]) {
case 'k':
k = std::stod(optarg);
break;
+ case 'v':
+ vsteps = std::stoi(optarg);
+ break;
}
double kprime = integrand::kprime(k);
@@ -293,15 +298,21 @@ int main(int argc, char *argv[]) {
curvetracer ct(f);
// fill
+ (*cdp->out()) << "\\def\\hintergrund{" << std::endl;
(*cdp->out()) << "\\fill[color=red!10] ({" << (-xmax) << "*\\dx},0) "
<< "rectangle ({" << xmax << "*\\dx},{" << ymax << "*\\dy});"
<< std::endl;
(*cdp->out()) << "\\fill[color=blue!10] ({" << (-xmax) << "*\\dx},{"
<< (-ymax) << "*\\dy}) rectangle ({" << xmax << "*\\dx},0);"
<< std::endl;
+ (*cdp->out()) << "}" << std::endl;
+
+ // macro for grid
+ (*cdp->out()) << "\\def\\netz#1{" << std::endl;
// "circles"
std::complex<double> dir(0.01, 0);
+ double deltax = Deltax;
for (double im = deltax; im < 3; im += deltax) {
std::complex<double> startz(0, im);
std::complex<double> startw = ct.startpoint(startz);
@@ -316,9 +327,9 @@ int main(int argc, char *argv[]) {
}
// imaginary axis
- (*cdp->out()) << "\\draw[color=red] (0,0) -- (0,{" << ymax
+ (*cdp->out()) << "\\draw[color=red,line width=#1] (0,0) -- (0,{" << ymax
<< "*\\dy});" << std::endl;
- (*cdp->out()) << "\\draw[color=blue] (0,0) -- (0,{" << (-ymax)
+ (*cdp->out()) << "\\draw[color=blue,line width=#1] (0,0) -- (0,{" << (-ymax)
<< "*\\dy});" << std::endl;
// arguments between 0 and 1
@@ -353,7 +364,8 @@ int main(int argc, char *argv[]) {
// arguments between 1 and 1/k
{
- for (double x0 = 1 + deltax; x0 < 1/k; x0 += deltax) {
+ deltax = (1/k - 1) / vsteps;
+ for (double x0 = 1 + deltax; x0 < 1/k + 0.00001; x0 += deltax) {
double y0 = sqrt(1-1/(x0*x0))/kprime;
//std::cout << "y0 = " << y0 << std::endl;
double y = gsl_sf_ellint_F(asin(y0), kprime,
@@ -389,8 +401,9 @@ int main(int argc, char *argv[]) {
// arguments larger than 1/k
{
+ deltax = Deltax;
dir = std::complex<double>(0, 0.01);
- double x0 = 1;
+ double x0 = 1/k;
while (x0 <= 1/k + 0.0001) { x0 += deltax; }
for (; x0 < 4; x0 += deltax) {
std::complex<double> startz(x0);
@@ -407,6 +420,8 @@ int main(int argc, char *argv[]) {
}
}
+ (*cdp->out()) << "}" << std::endl;
+
// border
(*cdp->out()) << "\\def\\xmax{" << xmax << "}" << std::endl;
(*cdp->out()) << "\\def\\ymax{" << ymax << "}" << std::endl;
diff --git a/buch/chapters/110-elliptisch/images/rechteck.pdf b/buch/chapters/110-elliptisch/images/rechteck.pdf
index 6209897..46f2376 100644
--- a/buch/chapters/110-elliptisch/images/rechteck.pdf
+++ b/buch/chapters/110-elliptisch/images/rechteck.pdf
Binary files differ
diff --git a/buch/chapters/110-elliptisch/images/rechteck.tex b/buch/chapters/110-elliptisch/images/rechteck.tex
index 622a9e9..12535ba 100644
--- a/buch/chapters/110-elliptisch/images/rechteck.tex
+++ b/buch/chapters/110-elliptisch/images/rechteck.tex
@@ -18,6 +18,8 @@
\def\dy{3}
\input{rechteckpfade.tex}
+\hintergrund
+\netz{0.7pt}
\begin{scope}
\clip ({-\xmax*\dx},{-\ymax*\dy}) rectangle ({\xmax*\dx},{\ymax*\dy});
diff --git a/buch/chapters/110-elliptisch/images/slcl.cpp b/buch/chapters/110-elliptisch/images/slcl.cpp
new file mode 100644
index 0000000..8584e94
--- /dev/null
+++ b/buch/chapters/110-elliptisch/images/slcl.cpp
@@ -0,0 +1,128 @@
+/*
+ * slcl.cpp
+ *
+ * (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+ */
+#include <cstdlib>
+#include <cstdio>
+#include <cmath>
+#include <iostream>
+#include <fstream>
+#include <sstream>
+#include <getopt.h>
+#include <vector>
+#include <gsl/gsl_sf_elljac.h>
+
+namespace slcl {
+
+static struct option longopts[] {
+{ "outfile", required_argument, NULL, 'o' },
+{ "a", required_argument, NULL, 'a' },
+{ "b", required_argument, NULL, 'b' },
+{ "steps", required_argument, NULL, 'n' },
+{ NULL, 0, NULL, 0 }
+};
+
+class plot {
+ typedef std::pair<double, double> point_t;
+ typedef std::vector<point_t> curve_t;
+ curve_t _sl;
+ curve_t _cl;
+ double _a;
+ double _b;
+ int _steps;
+public:
+ double a() const { return _a; }
+ double b() const { return _b; }
+ int steps() const { return _steps; }
+public:
+ plot(double a, double b, int steps) : _a(a), _b(b), _steps(steps) {
+ double l = sqrt(2);
+ double k = 1 / l;
+ double m = k * k;
+ double h = (b - a) / steps;
+ for (int i = 0; i <= steps; i++) {
+ double x = a + h * i;
+ double sn, cn, dn;
+ gsl_sf_elljac_e(x, m, &sn, &cn, &dn);
+ _sl.push_back(std::make_pair(l * x, k * sn / dn));
+ _cl.push_back(std::make_pair(l * x, cn));
+ }
+ }
+private:
+ std::string point(const point_t p) const {
+ char buffer[128];
+ snprintf(buffer, sizeof(buffer), "({%.4f*\\dx},{%.4f*\\dy})",
+ p.first, p.second);
+ return std::string(buffer);
+ }
+ std::string path(const curve_t& curve) const {
+ std::ostringstream out;
+ auto i = curve.begin();
+ out << point(*(i++));
+ do {
+ out << std::endl << " -- " << point(*(i++));
+ } while (i != curve.end());
+ out.flush();
+ return out.str();
+ }
+public:
+ std::string slpath() const {
+ return path(_sl);
+ }
+ std::string clpath() const {
+ return path(_cl);
+ }
+};
+
+/**
+ * \brief Main function for the slcl program
+ */
+int main(int argc, char *argv[]) {
+ int longindex;
+ int c;
+ double a = 0;
+ double b = 10;
+ int steps = 100;
+ std::ostream *out = &std::cout;
+ while (EOF != (c = getopt_long(argc, argv, "a:b:o:n:",
+ longopts, &longindex)))
+ switch (c) {
+ case 'a':
+ a = std::stod(optarg);
+ break;
+ case 'b':
+ b = std::stod(optarg) / sqrt(2);
+ break;
+ case 'n':
+ steps = std::stol(optarg);
+ break;
+ case 'o':
+ out = new std::ofstream(optarg);
+ break;
+ }
+
+ plot p(a, b, steps);
+ (*out) << "\\def\\slpath{ " << p.slpath();
+ (*out) << std::endl << " }" << std::endl;
+ (*out) << "\\def\\clpath{ " << p.clpath();
+ (*out) << std::endl << " }" << std::endl;
+
+ out->flush();
+ //out->close();
+ return EXIT_SUCCESS;
+}
+
+} // namespace slcl
+
+int main(int argc, char *argv[]) {
+ try {
+ return slcl::main(argc, argv);
+ } catch (const std::exception& e) {
+ std::cerr << "terminated by exception: " << e.what();
+ std::cerr << std::endl;
+ } catch (...) {
+ std::cerr << "terminated by unknown exception" << std::endl;
+ }
+ return EXIT_FAILURE;
+}
diff --git a/buch/chapters/110-elliptisch/images/slcl.pdf b/buch/chapters/110-elliptisch/images/slcl.pdf
new file mode 100644
index 0000000..71645e3
--- /dev/null
+++ b/buch/chapters/110-elliptisch/images/slcl.pdf
Binary files differ
diff --git a/buch/chapters/110-elliptisch/images/slcl.tex b/buch/chapters/110-elliptisch/images/slcl.tex
new file mode 100644
index 0000000..0af1027
--- /dev/null
+++ b/buch/chapters/110-elliptisch/images/slcl.tex
@@ -0,0 +1,88 @@
+%
+% tikztemplate.tex -- template for standalon tikz images
+%
+% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\documentclass[tikz]{standalone}
+\usepackage{amsmath}
+\usepackage{times}
+\usepackage{txfonts}
+\usepackage{pgfplots}
+\usepackage{csvsimple}
+\usetikzlibrary{arrows,intersections,math}
+\begin{document}
+\input{slcldata.tex}
+\def\skala{1}
+\begin{tikzpicture}[>=latex,thick,scale=\skala]
+
+% add image content here
+\def\lemniscateconstant{2.6220575542}
+\pgfmathparse{(3.1415926535/2)/\lemniscateconstant}
+\xdef\scalechange{\pgfmathresult}
+
+\pgfmathparse{\scalechange*(180/3.1415926535)}
+\xdef\ts{\pgfmathresult}
+
+\def\dx{1}
+\def\dy{3}
+
+\draw[line width=0.3pt]
+ ({\lemniscateconstant*\dx},0)
+ --
+ ({\lemniscateconstant*\dx},{1*\dy});
+\draw[line width=0.3pt]
+ ({2*\lemniscateconstant*\dx},0)
+ --
+ ({2*\lemniscateconstant*\dx},{-1*\dy});
+\draw[line width=0.3pt]
+ ({3*\lemniscateconstant*\dx},0)
+ --
+ ({3*\lemniscateconstant*\dx},{-1*\dy});
+\draw[line width=0.3pt]
+ ({4*\lemniscateconstant*\dx},0)
+ --
+ ({4*\lemniscateconstant*\dx},{1*\dy});
+\draw[line width=0.3pt]
+ ({5*\lemniscateconstant*\dx},0)
+ --
+ ({5*\lemniscateconstant*\dx},{1*\dy});
+
+\draw[color=red!40,line width=1.4pt]
+ plot[domain=0:13,samples=200] ({\x},{\dy*sin(\ts*\x)});
+\draw[color=blue!40,line width=1.4pt]
+ plot[domain=0:13,samples=200] ({\x},{\dy*cos(\ts*\x)});
+
+\draw[color=red,line width=1.4pt] \slpath;
+\draw[color=blue,line width=1.4pt] \clpath;
+
+\draw[->] (0,{-1*\dy-0.1}) -- (0,{1*\dy+0.4}) coordinate[label={right:$r$}];
+\draw[->] (-0.1,0) -- (13.6,0) coordinate[label={$s$}];
+
+\foreach \i in {1,2,3,4,5}{
+ \draw ({\lemniscateconstant*\i},-0.1) -- ({\lemniscateconstant*\i},0.1);
+}
+\node at ({\lemniscateconstant*\dx},0) [below left] {$\frac{\varpi}2\mathstrut$};
+\node at ({2*\lemniscateconstant*\dx},0) [below left] {$\varpi\mathstrut$};
+\node at ({3*\lemniscateconstant*\dx},0) [below right] {$\frac{3\varpi}2\mathstrut$};
+\node at ({4*\lemniscateconstant*\dx},0) [below right] {$2\varpi\mathstrut$};
+\node at ({5*\lemniscateconstant*\dx},0) [below left] {$\frac{5\varpi}2\mathstrut$};
+
+\node[color=red] at ({1.6*\lemniscateconstant*\dx},{0.6*\dy})
+ [below left] {$\operatorname{sl}(s)$};
+\node[color=red!50] at ({1.5*\lemniscateconstant*\dx},{sin(1.5*90)*\dy*0.90})
+ [above right] {$\sin \bigl(\frac{\pi}{\varpi}s\bigr)$};
+
+\node[color=blue] at ({1.4*\lemniscateconstant*\dx},{-0.6*\dy})
+ [above right] {$\operatorname{cl}(s)$};
+\node[color=blue!50] at ({1.5*\lemniscateconstant*\dx},{cos(1.5*90)*\dy*0.90})
+ [below left] {$\cos\bigl(\frac{\pi}{\varpi}s\bigr)$};
+
+\draw (-0.1,{1*\dy}) -- (0.1,{1*\dy});
+\draw (-0.1,{-1*\dy}) -- (0.1,{-1*\dy});
+\node at (0,{1*\dy}) [left] {$1\mathstrut$};
+\node at (0,0) [left] {$0\mathstrut$};
+\node at (0,{-1*\dy}) [left] {$-1\mathstrut$};
+
+\end{tikzpicture}
+\end{document}
+
diff --git a/buch/chapters/110-elliptisch/images/torusschnitt.pdf b/buch/chapters/110-elliptisch/images/torusschnitt.pdf
new file mode 100644
index 0000000..9b64ab2
--- /dev/null
+++ b/buch/chapters/110-elliptisch/images/torusschnitt.pdf
Binary files differ
diff --git a/buch/chapters/110-elliptisch/images/torusschnitt.pov b/buch/chapters/110-elliptisch/images/torusschnitt.pov
new file mode 100644
index 0000000..e5602df
--- /dev/null
+++ b/buch/chapters/110-elliptisch/images/torusschnitt.pov
@@ -0,0 +1,308 @@
+//
+// kegelpara.pov
+//
+// (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+//
+#version 3.7;
+#include "colors.inc"
+
+#declare O = <0,0,0>;
+
+global_settings {
+ assumed_gamma 1
+}
+
+#declare imagescale = 0.060;
+
+camera {
+ location <28, 20, -40>
+ look_at <0, 0.55, 0>
+ right (16/9) * x * imagescale
+ up y * imagescale
+}
+
+light_source {
+ <30, 10, -40> color White
+ area_light <1,0,0> <0,0,1>, 10, 10
+ adaptive 1
+ jitter
+}
+
+sky_sphere {
+ pigment {
+ color rgb<1,1,1>
+ }
+}
+
+
+//
+// draw an arrow from <from> to <to> with thickness <arrowthickness> with
+// color <c>
+//
+#macro arrow(from, to, arrowthickness, c)
+#declare arrowdirection = vnormalize(to - from);
+#declare arrowlength = vlength(to - from);
+union {
+ sphere {
+ from, 1.1 * arrowthickness
+ }
+ cylinder {
+ from,
+ from + (arrowlength - 5 * arrowthickness) * arrowdirection,
+ arrowthickness
+ }
+ cone {
+ from + (arrowlength - 5 * arrowthickness) * arrowdirection,
+ 2 * arrowthickness,
+ to,
+ 0
+ }
+ pigment {
+ color c
+ }
+ finish {
+ specular 0.9
+ metallic
+ }
+}
+#end
+
+
+#macro Ticks(tl, tr)
+union {
+ #declare s = 1;
+ #while (s <= 3.1)
+ cylinder { <-0.5*s-tl, 0, 0>, <-0.5*s+tl, 0, 0>, tr }
+ cylinder { < 0.5*s-tl, 0, 0>, < 0.5*s+tl, 0, 0>, tr }
+ #declare s = s + 1;
+ #end
+
+ #declare s = 1;
+ #while (s <= 4.1)
+ cylinder { <0, 0.5*s-tl, 0>, <0, 0.5*s+tl, 0>, tr }
+ #declare s = s + 1;
+ #end
+ #declare s = 1;
+ #while (s <= 2.1)
+ cylinder { <0,-0.5*s-tl, 0>, <0,-0.5*s+tl, 0>, tr }
+ #declare s = s + 1;
+ #end
+
+ #declare s = 1;
+ #while (s <= 4)
+ cylinder { <0, 0, 0.5*s-tl>, <0, 0, 0.5*s+tl>, tr }
+ #declare s = s + 1;
+ #end
+ #declare s = 1;
+ #while (s <= 3)
+ cylinder { <0, 0, -0.5*s-tl>, <0, 0, -0.5*s+tl>, tr }
+ #declare s = s + 1;
+ #end
+
+ pigment {
+ color White
+ }
+ finish {
+ specular 0.9
+ metallic
+ }
+}
+#end
+
+#declare epsilon = 0.001;
+#declare l = 1.5;
+
+#declare a = sqrt(2);
+#macro G2(phi,sg)
+ a * sqrt(cos(2*phi)) * < sg * cos(phi), 0, sin(phi)>
+#end
+
+#macro Lemniskate(s, farbe)
+union {
+ #declare phi = -pi / 4;
+ #declare phimax = pi / 4;
+ #declare phisteps = 100;
+ #declare phistep = phimax / phisteps;
+ #while (phi < phimax - phistep/2)
+ sphere { G2(phi,1), s }
+ cylinder { G2(phi,1), G2(phi+phistep,1), s }
+ sphere { G2(phi,-1), s }
+ cylinder { G2(phi,-1), G2(phi+phistep,-1), s }
+ #declare phi = phi + phistep;
+ #end
+ pigment {
+ color farbe
+ }
+ finish {
+ specular 0.9
+ metallic
+ }
+}
+#end
+
+#macro Projektion(s, farbe)
+union {
+ #declare phistep = pi / 16;
+ #declare phi = -pi / 4 + phistep;
+ #declare phimax = pi / 4;
+ #while (phi < phimax - phistep/2)
+ cylinder { G(phi, 1), G2(phi, 1), s }
+ cylinder { G(phi, -1), G2(phi, -1), s }
+ #declare phi = phi + phistep;
+ #end
+ pigment {
+ color farbe
+ }
+ finish {
+ specular 0.9
+ metallic
+ }
+}
+#end
+
+#macro Ebene(l, b, farbe)
+mesh {
+ triangle { <-l, 0, -b>, < l, 0, -b>, < l, 0, b> }
+ triangle { <-l, 0, -b>, < l, 0, b>, <-l, 0, b> }
+ pigment {
+ color farbe
+ }
+ finish {
+ specular 0.9
+ metallic
+ }
+}
+#end
+
+#macro Ebenengitter(l, b, s, r, farbe)
+union {
+ #declare lmax = floor(l / s);
+ #declare ll = -lmax;
+ #while (ll <= lmax)
+ cylinder { <ll * s, 0, -b>, <ll * s, 0, b>, r }
+ #declare ll = ll + 1;
+ #end
+ #declare bmax = floor(b / s);
+ #declare bb = -bmax;
+ #while (bb <= bmax)
+ cylinder { <-l, 0, bb * s>, <l, 0, bb * s>, r }
+ #declare bb = bb + 1;
+ #end
+ pigment {
+ color farbe
+ }
+ finish {
+ specular 0.9
+ metallic
+ }
+}
+#end
+
+#declare b = 0.5;
+#macro T(phi, theta)
+ b * < (2 + cos(theta)) * cos(phi), (2 + cos(theta)) * sin(phi) + 1, sin(theta) >
+#end
+
+#macro breitenkreis(theta, r)
+ #declare phi = 0;
+ #declare phimax = 2 * pi;
+ #declare phisteps = 200;
+ #declare phistep = phimax / phisteps;
+ #while (phi < phimax - phistep/2)
+ cylinder { T(phi, theta), T(phi + phistep, theta), r }
+ sphere { T(phi, theta), r }
+ #declare phi = phi + phistep;
+ #end
+#end
+
+#macro laengenkreis(phi, r)
+ #declare theta = 0;
+ #declare thetamax = 2 * pi;
+ #declare thetasteps = 200;
+ #declare thetastep = thetamax / thetasteps;
+ #while (theta < thetamax - thetastep/2)
+ cylinder { T(phi, theta), T(phi, theta + thetastep), r }
+ sphere { T(phi, theta), r }
+ #declare theta = theta + thetastep;
+ #end
+#end
+
+#macro Torusgitter(farbe, r)
+union {
+ #declare phi = 0;
+ #declare phimax = 2 * pi;
+ #declare phistep = pi / 6;
+ #while (phi < phimax - phistep/2)
+ laengenkreis(phi, r)
+ #declare phi = phi + phistep;
+ #end
+ #declare thetamax = pi;
+ #declare thetastep = pi / 6;
+ #declare theta = thetastep;
+ #while (theta < thetamax - thetastep/2)
+ breitenkreis(theta, r)
+ breitenkreis(thetamax + theta, r)
+ #declare theta = theta + thetastep;
+ #end
+ breitenkreis(0, 1.5 * r)
+ breitenkreis(pi, 1.5 * r)
+ pigment {
+ color farbe
+ }
+ finish {
+ specular 0.9
+ metallic
+ }
+}
+#end
+
+#macro Torus(farbe)
+mesh {
+ #declare phi = 0;
+ #declare phimax = 2 * pi;
+ #declare phisteps = 200;
+ #declare phistep = phimax/phisteps;
+ #while (phi < phimax - phistep/2)
+ #declare theta = 0;
+ #declare thetamax = 2 * pi;
+ #declare thetasteps = 200;
+ #declare thetastep = thetamax / thetasteps;
+ #while (theta < thetamax - thetastep/2)
+ triangle {
+ T(phi, theta),
+ T(phi + phistep, theta),
+ T(phi + phistep, theta + thetastep)
+ }
+ triangle {
+ T(phi, theta),
+ T(phi + phistep, theta + thetastep),
+ T(phi, theta + thetastep)
+ }
+ #declare theta = theta + thetastep;
+ #end
+ #declare phi = phi + phistep;
+ #end
+ pigment {
+ color farbe
+ }
+ finish {
+ specular 0.9
+ metallic
+ }
+}
+#end
+
+#declare torusfarbe = rgbt<0.2,0.6,0.2,0.2>;
+#declare ebenenfarbe = rgbt<0.2,0.6,1.0,0.2>;
+
+arrow(<-2,0,0>,<2,0,0>,0.02,White)
+arrow(<0,-1.1,0>,<0,2.2,0>,0.02,White)
+arrow(<0,0,-1.7>,<0,0,2.4>,0.02,White)
+Ticks(0.007,0.036)
+
+Lemniskate(0.02, Red)
+Ebene(1.8, 1.6, ebenenfarbe)
+Ebenengitter(1.8, 1.6, 0.5, 0.005, rgb<0.4,1,1>)
+Torus(torusfarbe)
+Torusgitter(Yellow, 0.005)
+
diff --git a/buch/chapters/110-elliptisch/images/torusschnitt.tex b/buch/chapters/110-elliptisch/images/torusschnitt.tex
new file mode 100644
index 0000000..63351ad
--- /dev/null
+++ b/buch/chapters/110-elliptisch/images/torusschnitt.tex
@@ -0,0 +1,41 @@
+%
+% torusschnitt.tex
+%
+% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\documentclass[tikz]{standalone}
+\usepackage{times}
+\usepackage{amsmath}
+\usepackage{txfonts}
+\usepackage[utf8]{inputenc}
+\usepackage{graphics}
+\usetikzlibrary{arrows,intersections,math}
+\usepackage{ifthen}
+\begin{document}
+
+\newboolean{showgrid}
+\setboolean{showgrid}{false}
+\def\breite{6}
+\def\hoehe{4}
+
+\begin{tikzpicture}[>=latex,thick]
+
+% Povray Bild
+\node at (0,0) {\includegraphics[width=11.98cm]{torusschnitt.jpg}};
+
+% Gitter
+\ifthenelse{\boolean{showgrid}}{
+\draw[step=0.1,line width=0.1pt] (-\breite,-\hoehe) grid (\breite, \hoehe);
+\draw[step=0.5,line width=0.4pt] (-\breite,-\hoehe) grid (\breite, \hoehe);
+\draw (-\breite,-\hoehe) grid (\breite, \hoehe);
+\fill (0,0) circle[radius=0.05];
+}{}
+
+\node at (4.4,-2.4) {$X$};
+\node at (3.5,0.6) {$Y$};
+\node at (0.3,3.8) {$Z$};
+
+\end{tikzpicture}
+
+\end{document}
+