From 332ac4d8384eb8afee67e290e7660bffa9887263 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Fri, 10 Jun 2022 15:50:16 +0200 Subject: add position subdirectory --- buch/papers/nav/images/Makefile | 27 +- buch/papers/nav/images/common.inc | 156 +----------- buch/papers/nav/images/dreieck3d1.pdf | Bin 90451 -> 85369 bytes buch/papers/nav/images/dreieck3d1.pov | 3 + buch/papers/nav/images/dreieck3d2.pdf | Bin 69523 -> 64256 bytes buch/papers/nav/images/dreieck3d2.pov | 2 + buch/papers/nav/images/dreieck3d3.pdf | Bin 82512 -> 77179 bytes buch/papers/nav/images/dreieck3d3.pov | 2 + buch/papers/nav/images/dreieck3d4.pdf | Bin 85037 -> 84768 bytes buch/papers/nav/images/dreieck3d4.pov | 2 + buch/papers/nav/images/dreieck3d5.pdf | Bin 70045 -> 64209 bytes buch/papers/nav/images/dreieck3d5.pov | 2 + buch/papers/nav/images/dreieck3d6.pov | 2 + buch/papers/nav/images/dreieck3d7.pov | 2 + buch/papers/nav/images/dreieck3d8.jpg | Bin 93432 -> 90015 bytes buch/papers/nav/images/dreieck3d8.pdf | Bin 107370 -> 103952 bytes buch/papers/nav/images/dreieck3d8.pov | 1 + buch/papers/nav/images/macros.inc | 343 ++++++++++++++++++++++++++ buch/papers/nav/images/position/Makefile | 54 ++++ buch/papers/nav/images/position/common.inc | 37 +++ buch/papers/nav/images/position/common.tex | 32 +++ buch/papers/nav/images/position/position1.pdf | Bin 0 -> 107297 bytes buch/papers/nav/images/position/position1.pov | 71 ++++++ buch/papers/nav/images/position/position1.tex | 55 +++++ buch/papers/nav/images/position/position2.pdf | Bin 0 -> 90563 bytes buch/papers/nav/images/position/position2.pov | 70 ++++++ buch/papers/nav/images/position/position2.tex | 53 ++++ buch/papers/nav/images/position/position3.pdf | Bin 0 -> 85020 bytes buch/papers/nav/images/position/position3.pov | 48 ++++ buch/papers/nav/images/position/position3.tex | 51 ++++ buch/papers/nav/images/position/position4.pdf | Bin 0 -> 86376 bytes buch/papers/nav/images/position/position4.pov | 69 ++++++ buch/papers/nav/images/position/position4.tex | 50 ++++ buch/papers/nav/images/position/position5.pdf | Bin 0 -> 91680 bytes buch/papers/nav/images/position/position5.pov | 69 ++++++ buch/papers/nav/images/position/position5.tex | 50 ++++ 36 files changed, 1087 insertions(+), 164 deletions(-) create mode 100644 buch/papers/nav/images/macros.inc create mode 100644 buch/papers/nav/images/position/Makefile create mode 100644 buch/papers/nav/images/position/common.inc create mode 100644 buch/papers/nav/images/position/common.tex create mode 100644 buch/papers/nav/images/position/position1.pdf create mode 100644 buch/papers/nav/images/position/position1.pov create mode 100644 buch/papers/nav/images/position/position1.tex create mode 100644 buch/papers/nav/images/position/position2.pdf create mode 100644 buch/papers/nav/images/position/position2.pov create mode 100644 buch/papers/nav/images/position/position2.tex create mode 100644 buch/papers/nav/images/position/position3.pdf create mode 100644 buch/papers/nav/images/position/position3.pov create mode 100644 buch/papers/nav/images/position/position3.tex create mode 100644 buch/papers/nav/images/position/position4.pdf create mode 100644 buch/papers/nav/images/position/position4.pov create mode 100644 buch/papers/nav/images/position/position4.tex create mode 100644 buch/papers/nav/images/position/position5.pdf create mode 100644 buch/papers/nav/images/position/position5.pov create mode 100644 buch/papers/nav/images/position/position5.tex (limited to 'buch/papers/nav') diff --git a/buch/papers/nav/images/Makefile b/buch/papers/nav/images/Makefile index da4defa..39bfbcf 100644 --- a/buch/papers/nav/images/Makefile +++ b/buch/papers/nav/images/Makefile @@ -51,73 +51,80 @@ DREIECKE3D = \ dreieck3d5.pdf \ dreieck3d6.pdf \ dreieck3d7.pdf \ - dreieck3d8.pdf + dreieck3d8.pdf dreiecke3d: $(DREIECKE3D) POVRAYOPTIONS = -W1080 -H1080 #POVRAYOPTIONS = -W480 -H480 -dreieck3d1.png: dreieck3d1.pov common.inc +dreieck3d1.png: dreieck3d1.pov common.inc macros.inc povray +A0.1 $(POVRAYOPTIONS) -Odreieck3d1.png dreieck3d1.pov dreieck3d1.jpg: dreieck3d1.png convert dreieck3d1.png -density 300 -units PixelsPerInch dreieck3d1.jpg dreieck3d1.pdf: dreieck3d1.tex dreieck3d1.jpg pdflatex dreieck3d1.tex -dreieck3d2.png: dreieck3d2.pov common.inc +dreieck3d2.png: dreieck3d2.pov common.inc macros.inc povray +A0.1 $(POVRAYOPTIONS) -Odreieck3d2.png dreieck3d2.pov dreieck3d2.jpg: dreieck3d2.png convert dreieck3d2.png -density 300 -units PixelsPerInch dreieck3d2.jpg dreieck3d2.pdf: dreieck3d2.tex dreieck3d2.jpg pdflatex dreieck3d2.tex -dreieck3d3.png: dreieck3d3.pov common.inc +dreieck3d3.png: dreieck3d3.pov common.inc macros.inc povray +A0.1 $(POVRAYOPTIONS) -Odreieck3d3.png dreieck3d3.pov dreieck3d3.jpg: dreieck3d3.png convert dreieck3d3.png -density 300 -units PixelsPerInch dreieck3d3.jpg dreieck3d3.pdf: dreieck3d3.tex dreieck3d3.jpg pdflatex dreieck3d3.tex -dreieck3d4.png: dreieck3d4.pov common.inc +dreieck3d4.png: dreieck3d4.pov common.inc macros.inc povray +A0.1 $(POVRAYOPTIONS) -Odreieck3d4.png dreieck3d4.pov dreieck3d4.jpg: dreieck3d4.png convert dreieck3d4.png -density 300 -units PixelsPerInch dreieck3d4.jpg dreieck3d4.pdf: dreieck3d4.tex dreieck3d4.jpg pdflatex dreieck3d4.tex -dreieck3d5.png: dreieck3d5.pov common.inc +dreieck3d5.png: dreieck3d5.pov common.inc macros.inc povray +A0.1 $(POVRAYOPTIONS) -Odreieck3d5.png dreieck3d5.pov dreieck3d5.jpg: dreieck3d5.png convert dreieck3d5.png -density 300 -units PixelsPerInch dreieck3d5.jpg dreieck3d5.pdf: dreieck3d5.tex dreieck3d5.jpg pdflatex dreieck3d5.tex -dreieck3d6.png: dreieck3d6.pov common.inc +dreieck3d6.png: dreieck3d6.pov common.inc macros.inc povray +A0.1 $(POVRAYOPTIONS) -Odreieck3d6.png dreieck3d6.pov dreieck3d6.jpg: dreieck3d6.png convert dreieck3d6.png -density 300 -units PixelsPerInch dreieck3d6.jpg dreieck3d6.pdf: dreieck3d6.tex dreieck3d6.jpg pdflatex dreieck3d6.tex -dreieck3d7.png: dreieck3d7.pov common.inc +dreieck3d7.png: dreieck3d7.pov common.inc macros.inc povray +A0.1 $(POVRAYOPTIONS) -Odreieck3d7.png dreieck3d7.pov dreieck3d7.jpg: dreieck3d7.png convert dreieck3d7.png -density 300 -units PixelsPerInch dreieck3d7.jpg dreieck3d7.pdf: dreieck3d7.tex dreieck3d7.jpg pdflatex dreieck3d7.tex -dreieck3d8.png: dreieck3d8.pov common.inc +dreieck3d8.png: dreieck3d8.pov common.inc macros.inc povray +A0.1 $(POVRAYOPTIONS) -Odreieck3d8.png dreieck3d8.pov dreieck3d8.jpg: dreieck3d8.png convert dreieck3d8.png -density 300 -units PixelsPerInch dreieck3d8.jpg dreieck3d8.pdf: dreieck3d8.tex dreieck3d8.jpg pdflatex dreieck3d8.tex -dreieck3d9.png: dreieck3d9.pov common.inc +dreieck3d9.png: dreieck3d9.pov common.inc macros.inc povray +A0.1 $(POVRAYOPTIONS) -Odreieck3d9.png dreieck3d9.pov dreieck3d9.jpg: dreieck3d9.png convert dreieck3d9.png -density 300 -units PixelsPerInch dreieck3d9.jpg dreieck3d9.pdf: dreieck3d9.tex dreieck3d9.jpg pdflatex dreieck3d9.tex +dreieck3d10.png: dreieck3d10.pov common.inc macros.inc + povray +A0.1 $(POVRAYOPTIONS) -Odreieck3d10.png dreieck3d10.pov +dreieck3d10.jpg: dreieck3d10.png + convert dreieck3d10.png -density 300 -units PixelsPerInch dreieck3d10.jpg +dreieck3d10.pdf: dreieck3d10.tex dreieck3d10.jpg macros.inc + pdflatex dreieck3d10.tex + diff --git a/buch/papers/nav/images/common.inc b/buch/papers/nav/images/common.inc index 2c0ae6e..7b861de 100644 --- a/buch/papers/nav/images/common.inc +++ b/buch/papers/nav/images/common.inc @@ -5,6 +5,7 @@ // #version 3.7; #include "colors.inc" +#include "macros.inc" global_settings { assumed_gamma 1 @@ -12,12 +13,6 @@ global_settings { #declare imagescale = 0.034; -#declare O = <0, 0, 0>; -#declare A = vnormalize(< 0, 1, 0>); -#declare B = vnormalize(< 1, 2, -8>); -#declare C = vnormalize(< 5, 1, 0>); -#declare P = vnormalize(< 5, -1, -7>); - camera { location <40, 20, -20> look_at <0, 0.24, -0.20> @@ -26,7 +21,7 @@ camera { } light_source { - <10, 10, -40> color White + <30, 10, -40> color White area_light <1,0,0> <0,0,1>, 10, 10 adaptive 1 jitter @@ -38,150 +33,3 @@ sky_sphere { } } -// -// draw an arrow from to with thickness with -// color -// -#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 grosskreis(normale, staerke) -union { - #declare v1 = vcross(normale, ); - #declare v1 = vnormalize(v1); - #declare v2 = vnormalize(vcross(v1, normale)); - #declare phisteps = 100; - #declare phistep = pi / phisteps; - #declare phi = 0; - #declare p1 = v1; - #while (phi < 2 * pi - phistep/2) - sphere { p1, staerke } - #declare phi = phi + phistep; - #declare p2 = v1 * cos(phi) + v2 * sin(phi); - cylinder { p1, p2, staerke } - #declare p1 = p2; - #end -} -#end - -#macro seite(p, q, staerke) - #declare n = vcross(p, q); - intersection { - grosskreis(n, staerke) - plane { -vcross(n, q) * vdot(vcross(n, q), p), 0 } - plane { -vcross(n, p) * vdot(vcross(n, p), q), 0 } - } -#end - -#macro winkel(w, p, q, staerke, r) - #declare n = vnormalize(w); - #declare pp = vnormalize(p - vdot(n, p) * n); - #declare qq = vnormalize(q - vdot(n, q) * n); - intersection { - sphere { O, 1 + staerke } - cone { O, 0, 1.2 * vnormalize(w), r } - plane { -vcross(n, qq) * vdot(vcross(n, qq), pp), 0 } - plane { -vcross(n, pp) * vdot(vcross(n, pp), qq), 0 } - } -#end - -#macro punkt(p, staerke) - sphere { p, 1.5 * staerke } -#end - -#macro dreieck(p, q, r, farbe) - #declare n1 = vnormalize(vcross(p, q)); - #declare n2 = vnormalize(vcross(q, r)); - #declare n3 = vnormalize(vcross(r, p)); - intersection { - plane { n1, 0 } - plane { n2, 0 } - plane { n3, 0 } - sphere { <0, 0, 0>, 1 + 0.001 } - pigment { - color farbe - } - finish { - metallic - specular 0.4 - } - } -#end - -#macro ebenerwinkel(a, p, q, s, r, farbe) - #declare n = vnormalize(-vcross(p, q)); - #declare np = vnormalize(-vcross(p, n)); - #declare nq = -vnormalize(-vcross(q, n)); -// arrow(a, a + n, 0.02, White) -// arrow(a, a + np, 0.01, Red) -// arrow(a, a + nq, 0.01, Blue) - intersection { - cylinder { a - (s/2) * n, a + (s/2) * n, r } - plane { np, vdot(np, a) } - plane { nq, vdot(nq, a) } - pigment { - farbe - } - finish { - metallic - specular 0.5 - } - } -#end - -#macro komplement(a, p, q, s, r, farbe) - #declare n = vnormalize(-vcross(p, q)); -// arrow(a, a + n, 0.015, Orange) - #declare m = vnormalize(-vcross(q, n)); -// arrow(a, a + m, 0.015, Pink) - ebenerwinkel(a, p, m, s, r, farbe) -#end - -#declare fett = 0.015; -#declare fein = 0.010; - -#declare klein = 0.3; -#declare gross = 0.4; - -#declare dreieckfarbe = rgb<0.6,0.6,0.6>; -#declare rot = rgb<0.8,0.2,0.2>; -#declare gruen = rgb<0,0.6,0>; -#declare blau = rgb<0.2,0.2,0.8>; - -#declare kugelfarbe = rgb<0.8,0.8,0.8>; -#declare kugeltransparent = rgbt<0.8,0.8,0.8,0.5>; - -#macro kugel(farbe) -sphere { - <0, 0, 0>, 1 - pigment { - color farbe - } -} -#end - diff --git a/buch/papers/nav/images/dreieck3d1.pdf b/buch/papers/nav/images/dreieck3d1.pdf index 015bce7..fecaece 100644 Binary files a/buch/papers/nav/images/dreieck3d1.pdf and b/buch/papers/nav/images/dreieck3d1.pdf differ diff --git a/buch/papers/nav/images/dreieck3d1.pov b/buch/papers/nav/images/dreieck3d1.pov index e491075..336161c 100644 --- a/buch/papers/nav/images/dreieck3d1.pov +++ b/buch/papers/nav/images/dreieck3d1.pov @@ -3,8 +3,11 @@ // // (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule // +#version 3.7; #include "common.inc" +kugel(kugeldunkel) + union { seite(A, B, fett) seite(B, C, fett) diff --git a/buch/papers/nav/images/dreieck3d2.pdf b/buch/papers/nav/images/dreieck3d2.pdf index 6b3f09d..28af5fe 100644 Binary files a/buch/papers/nav/images/dreieck3d2.pdf and b/buch/papers/nav/images/dreieck3d2.pdf differ diff --git a/buch/papers/nav/images/dreieck3d2.pov b/buch/papers/nav/images/dreieck3d2.pov index c0625ce..9e57d22 100644 --- a/buch/papers/nav/images/dreieck3d2.pov +++ b/buch/papers/nav/images/dreieck3d2.pov @@ -5,6 +5,8 @@ // #include "common.inc" +kugel(kugeldunkel) + union { seite(A, B, fett) seite(B, C, fett) diff --git a/buch/papers/nav/images/dreieck3d3.pdf b/buch/papers/nav/images/dreieck3d3.pdf index 7d79455..4fc4fc1 100644 Binary files a/buch/papers/nav/images/dreieck3d3.pdf and b/buch/papers/nav/images/dreieck3d3.pdf differ diff --git a/buch/papers/nav/images/dreieck3d3.pov b/buch/papers/nav/images/dreieck3d3.pov index b6f64d5..bde780b 100644 --- a/buch/papers/nav/images/dreieck3d3.pov +++ b/buch/papers/nav/images/dreieck3d3.pov @@ -5,6 +5,8 @@ // #include "common.inc" +kugel(kugeldunkel) + union { seite(A, B, fett) seite(B, C, fett) diff --git a/buch/papers/nav/images/dreieck3d4.pdf b/buch/papers/nav/images/dreieck3d4.pdf index e1ea757..0d57fc2 100644 Binary files a/buch/papers/nav/images/dreieck3d4.pdf and b/buch/papers/nav/images/dreieck3d4.pdf differ diff --git a/buch/papers/nav/images/dreieck3d4.pov b/buch/papers/nav/images/dreieck3d4.pov index b6f17e3..08f266b 100644 --- a/buch/papers/nav/images/dreieck3d4.pov +++ b/buch/papers/nav/images/dreieck3d4.pov @@ -5,6 +5,8 @@ // #include "common.inc" +kugel(kugelfarbe) + union { seite(A, B, fein) seite(A, C, fein) diff --git a/buch/papers/nav/images/dreieck3d5.pdf b/buch/papers/nav/images/dreieck3d5.pdf index 0c86d36..a5dd0ae 100644 Binary files a/buch/papers/nav/images/dreieck3d5.pdf and b/buch/papers/nav/images/dreieck3d5.pdf differ diff --git a/buch/papers/nav/images/dreieck3d5.pov b/buch/papers/nav/images/dreieck3d5.pov index 188f181..1aac0dc 100644 --- a/buch/papers/nav/images/dreieck3d5.pov +++ b/buch/papers/nav/images/dreieck3d5.pov @@ -5,6 +5,8 @@ // #include "common.inc" +kugel(kugeldunkel) + union { seite(A, B, fein) seite(A, C, fein) diff --git a/buch/papers/nav/images/dreieck3d6.pov b/buch/papers/nav/images/dreieck3d6.pov index 191a1e7..6bbd1a9 100644 --- a/buch/papers/nav/images/dreieck3d6.pov +++ b/buch/papers/nav/images/dreieck3d6.pov @@ -5,6 +5,8 @@ // #include "common.inc" +kugel(kugeldunkel) + union { seite(A, B, fett) seite(A, C, fett) diff --git a/buch/papers/nav/images/dreieck3d7.pov b/buch/papers/nav/images/dreieck3d7.pov index aae5c6c..45dc5d6 100644 --- a/buch/papers/nav/images/dreieck3d7.pov +++ b/buch/papers/nav/images/dreieck3d7.pov @@ -5,6 +5,8 @@ // #include "common.inc" +kugel(kugeldunkel) + union { seite(A, C, fett) seite(A, P, fett) diff --git a/buch/papers/nav/images/dreieck3d8.jpg b/buch/papers/nav/images/dreieck3d8.jpg index 52bd25e..f24ea33 100644 Binary files a/buch/papers/nav/images/dreieck3d8.jpg and b/buch/papers/nav/images/dreieck3d8.jpg differ diff --git a/buch/papers/nav/images/dreieck3d8.pdf b/buch/papers/nav/images/dreieck3d8.pdf index 9d630aa..da3b110 100644 Binary files a/buch/papers/nav/images/dreieck3d8.pdf and b/buch/papers/nav/images/dreieck3d8.pdf differ diff --git a/buch/papers/nav/images/dreieck3d8.pov b/buch/papers/nav/images/dreieck3d8.pov index 9e9921a..dae7f67 100644 --- a/buch/papers/nav/images/dreieck3d8.pov +++ b/buch/papers/nav/images/dreieck3d8.pov @@ -93,4 +93,5 @@ object { dreieck(A, B, C, White) +kugel(kugeldunkel) diff --git a/buch/papers/nav/images/macros.inc b/buch/papers/nav/images/macros.inc new file mode 100644 index 0000000..2def6fd --- /dev/null +++ b/buch/papers/nav/images/macros.inc @@ -0,0 +1,343 @@ +// +// macros.inc -- 3d Darstellung +// +// (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +// +#version 3.7; +#include "colors.inc" + +// +// Dimensions +// +#declare fett = 0.015; +#declare fein = 0.010; + +#declare klein = 0.3; +#declare gross = 0.4; + +// +// colors +// +#declare dreieckfarbe = rgb<0.6,0.6,0.6>; +#declare rot = rgb<0.8,0.2,0.2>; +#declare gruen = rgb<0,0.6,0>; +#declare blau = rgb<0.2,0.2,0.8>; + +#declare bekannt = rgb<0.2,0.6,1>; +#declare unbekannt = rgb<1.0,0.6,0.8>; + +#declare kugelfarbe = rgb<0.8,0.8,0.8>; +#declare kugeldunkel = rgb<0.4,0.4,0.4>; +#declare kugeltransparent = rgbt<0.8,0.8,0.8,0.5>; + +#declare gitterfarbe = rgb<0.2,0.6,1>; + +// +// Points Points +// +#declare O = <0, 0, 0>; +#declare Nordpol = vnormalize(< 0, 1, 0>); +#declare A = vnormalize(< 0, 1, 0>); +#declare B = vnormalize(< 1, 2, -8>); +#declare C = vnormalize(< 5, 1, 0>); +#declare P = vnormalize(< 5, -1, -7>); + +// +// \brief convert spherical coordinates to recctangular coordinates +// +// \param phi +// \param theta +// +#macro kugelpunkt(phi, theta) + < sin(theta) * cos(phi - pi), cos(theta), sin(theta) * sin(phi - pi) > +#end + +#declare Sakura = kugelpunkt(radians(140.2325498), radians(90 - 35.71548014)); +#declare Deneb = kugelpunkt(radians(191.9397759), radians(90 - 45.361194)); +#declare Spica = kugelpunkt(radians(82.9868559), radians(90 - (-11.279666))); +#declare Altair = kugelpunkt(radians(179.3616609), radians(90 - 8.928416)); +#declare Arktur = kugelpunkt(radians(95.5647759), radians(90 - 19.063222)); + +// +// draw an arrow from to with thickness with +// color +// +#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 + +#declare ntsteps = 100; + +// +// \brief Draw a circle +// +// \param b1 basis vector for a coordinate system of the plane containing +// the circle +// \param b2 the other basis vector +// \param o center of the circle +// \param thick diameter of the circular tube +// +#macro kreis(b1, b2, o, thick, maxwinkel) + #declare tpstep = pi / ntsteps; + #declare tp = tpstep; + #declare p1 = b1 + o; + sphere { p1, thick } + #declare tpstep = pi/ntsteps; + #while (tp < (maxwinkel - tpstep/2)) + #declare p2 = cos(tp) * b1 + sin(tp) * b2 + o; + cylinder { p1, p2, thick } + sphere { p2, thick } + #declare p1 = p2; + #declare tp = tp + tpstep; + #end + #if ((tp - tpstep) < maxwinkel) + #declare p2 = cos(maxwinkel) * b1 + sin(maxwinkel) * b2 + o; + cylinder { p1, p2, thick } + sphere { p2, thick } + #end +#end + +// +// \brief Draw a great circle +// +// \param normale the normal of the plane containing the great circle +// \param thick diameter +// +#macro grosskreis(normale, thick) + #declare other = < normale.y, -normale.x, normale.z >; + #declare b1 = vnormalize(vcross(other, normale)); + #declare b2 = vnormalize(vcross(normale, b1)); + kreis(b1, b2, <0,0,0>, thick, 2*pi) +#end + +// +// \brief Draw a circle of latitude +// +// \param theta latitude +// \param thick diameter +// +#macro breitenkreis(theta, thick) + #declare b1 = sin(theta) * kugelpunkt(0, pi/2); + #declare b2 = sin(theta) * kugelpunkt(pi/2, pi/2); + #declare o = < 0, cos(theta), 0 >; + kreis(b1, b2, o, thick, 2*pi) +#end + +// +// \brief Draw the great circle connecting the two points +// +// \param p first point +// \param q second point +// \param staerke diameter +// + +#macro seite(p, q, staerke) + #declare s1 = vnormalize(p); + #declare s2 = vnormalize(q); + #declare w = acos(vdot(s1, s2)); + #declare n = vnormalize(vcross(p, q)); + #declare s2 = vnormalize(vcross(n, s1)); + kreis(s1, s2, O, staerke, w) +#end + +// +// \brief Draw an angle +// +// \param w the edge where the angle is located +// \param p point on the first leg +// \param q point on the second leg +// \param r diameter of the angle +// +#macro winkel(w, p, q, staerke, r) + #declare n = vnormalize(w); + #declare pp = vnormalize(p - vdot(n, p) * n); + #declare qq = vnormalize(q - vdot(n, q) * n); + intersection { + sphere { O, 1 + staerke } + cone { O, 0, 1.2 * vnormalize(w), r } + plane { -vcross(n, qq) * vdot(vcross(n, qq), pp), 0 } + plane { -vcross(n, pp) * vdot(vcross(n, pp), qq), 0 } + } +#end + +// +// \brief Draw a point on the sphere as a circle +// +// \param p the point +// \param staerke the diameter of the point +// +#macro punkt(p, staerke) + sphere { p, 1.5 * staerke } +#end + +// +// \brief Draw a circle as a part of the differently colored cutout from +// the sphere +// +// \param p first point of the triangle +// \param q second point of the triangle +// \param r third point of the triangle +// \param farbe color +// +#macro dreieck(p, q, r, farbe) + #declare n1 = vnormalize(vcross(p, q)); + #declare n2 = vnormalize(vcross(q, r)); + #declare n3 = vnormalize(vcross(r, p)); + intersection { + plane { n1, 0 } + plane { n2, 0 } + plane { n3, 0 } + sphere { <0, 0, 0>, 1 + 0.001 } + pigment { + color farbe + } + finish { + metallic + specular 0.4 + } + } +#end + +// +// \brief +// +// \param a axis of the angle +// \param p first leg +// \param q second leg +// \param s thickness of the angle disk +// \param r radius of the angle disk +// \param farbe color +// +#macro ebenerwinkel(a, p, q, s, r, farbe) + #declare n = vnormalize(-vcross(p, q)); + #declare np = vnormalize(-vcross(p, n)); + #declare nq = -vnormalize(-vcross(q, n)); +// arrow(a, a + n, 0.02, White) +// arrow(a, a + np, 0.01, Red) +// arrow(a, a + nq, 0.01, Blue) + intersection { + cylinder { a - (s/2) * n, a + (s/2) * n, r } + plane { np, vdot(np, a) } + plane { nq, vdot(nq, a) } + pigment { + farbe + } + finish { + metallic + specular 0.5 + } + } +#end + +// +// \brief Show the complement angle +// +// +#macro komplement(a, p, q, s, r, farbe) + #declare n = vnormalize(-vcross(p, q)); +// arrow(a, a + n, 0.015, Orange) + #declare m = vnormalize(-vcross(q, n)); +// arrow(a, a + m, 0.015, Pink) + ebenerwinkel(a, p, m, s, r, farbe) +#end + +// +// \brief Show a coordinate grid on the sphere +// +// \param farbe the color of the grid +// \param thick the line thickness +// +#macro koordinatennetz(farbe, netzschritte, thick) +union { + // circles of latitude + #declare theta = pi/(2*netzschritte); + #declare thetastep = pi/(2*netzschritte); + #while (theta < pi - thetastep/2) + breitenkreis(theta, thick) + #declare theta = theta + thetastep; + #end + // cirles of longitude + #declare phi = 0; + #declare phistep = pi/(2*netzschritte); + #while (phi < pi-phistep/2) + grosskreis(kugelpunkt(phi, pi/2), thick) + #declare phi = phi + phistep; + #end + pigment { + color farbe + } + finish { + specular 0.9 + metallic + } +} +#end + +// +// \brief Display a color of given color +// +// \param farbe the color +// +#macro kugel(farbe) +sphere { + <0, 0, 0>, 1 + pigment { + color farbe + } +} +#end + +// +// \brief Display the earth +// +#macro erde() +sphere { + <0, 0, 0>, 1 + pigment { + image_map { + png "2k_earth_daymap.png" gamma 1.0 + map_type 1 + } + } +} +#end + +// +// achse +// +#macro achse(durchmesser, farbe) + cylinder { + < 0, -1.2, 0 >, <0, 1.2, 0 >, durchmesser + pigment { + color farbe + } + finish { + specular 0.9 + metallic + } + } +#end diff --git a/buch/papers/nav/images/position/Makefile b/buch/papers/nav/images/position/Makefile new file mode 100644 index 0000000..280e59c --- /dev/null +++ b/buch/papers/nav/images/position/Makefile @@ -0,0 +1,54 @@ +# +# Makefile to build images +# +# (c) 2022 +# +all: position + +POSITION = \ + position1.pdf \ + position2.pdf \ + position3.pdf \ + position4.pdf \ + position5.pdf + +position: $(POSITION) + +POVRAYOPTIONS = -W1080 -H1080 +#POVRAYOPTIONS = -W480 -H480 + +position1.png: position1.pov common.inc ../macros.inc + povray +A0.1 $(POVRAYOPTIONS) -Oposition1.png position1.pov +position1.jpg: position1.png + convert position1.png -density 300 -units PixelsPerInch position1.jpg +position1.pdf: position1.tex common.tex position1.jpg + pdflatex position1.tex + +position2.png: position2.pov common.inc ../macros.inc + povray +A0.1 $(POVRAYOPTIONS) -Oposition2.png position2.pov +position2.jpg: position2.png + convert position2.png -density 300 -units PixelsPerInch position2.jpg +position2.pdf: position2.tex common.tex position2.jpg + pdflatex position2.tex + +position3.png: position3.pov common.inc ../macros.inc + povray +A0.1 $(POVRAYOPTIONS) -Oposition3.png position3.pov +position3.jpg: position3.png + convert position3.png -density 300 -units PixelsPerInch position3.jpg +position3.pdf: position3.tex common.tex position3.jpg + pdflatex position3.tex + +position4.png: position4.pov common.inc ../macros.inc + povray +A0.1 $(POVRAYOPTIONS) -Oposition4.png position4.pov +position4.jpg: position4.png + convert position4.png -density 300 -units PixelsPerInch position4.jpg +position4.pdf: position4.tex common.tex position4.jpg + pdflatex position4.tex + +position5.png: position5.pov common.inc ../macros.inc + povray +A0.1 $(POVRAYOPTIONS) -Oposition5.png position5.pov +position5.jpg: position5.png + convert position5.png -density 300 -units PixelsPerInch position5.jpg +position5.pdf: position5.tex common.tex position5.jpg + pdflatex position5.tex + diff --git a/buch/papers/nav/images/position/common.inc b/buch/papers/nav/images/position/common.inc new file mode 100644 index 0000000..b50b8d6 --- /dev/null +++ b/buch/papers/nav/images/position/common.inc @@ -0,0 +1,37 @@ +// +// common.inc -- 3d Darstellung +// +// (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +// +#version 3.7; +#include "colors.inc" +#include "../macros.inc" + +global_settings { + assumed_gamma 1 +} + +#declare imagescale = 0.034; + +camera { + location <40, 20, -20> + look_at <0, 0.24, -0.20> + 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> + } +} + +kugel(kugeldunkel) +achse(fein, White) diff --git a/buch/papers/nav/images/position/common.tex b/buch/papers/nav/images/position/common.tex new file mode 100644 index 0000000..d72a981 --- /dev/null +++ b/buch/papers/nav/images/position/common.tex @@ -0,0 +1,32 @@ +% +% common.tex +% +% (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +% + +\def\labelA{\node at (0.7,3.8) {$A$};} +\def\labelB{\node at (-3.4,-0.8) {$B$};} +\def\labelC{\node at (3.3,-2.1) {$C$};} +\def\labelP{\node at (-1.4,-3.5) {$P$};} + +\def\labelc{\node at (-1.9,2.1) {$c$};} +\def\labela{\node at (-0.2,-1.2) {$a$};} +\def\labelb{\node at (2.6,1.5) {$b$};} + +\def\labelhb{\node at (-2.6,-2.2) {$h_b$};} +\def\labelhc{\node at (1,-2.9) {$h_c$};} +\def\labell{\node at (-0.7,0.3) {$l$};} + +\def\labelalpha{\node at (0.6,2.85) {$\alpha$};} +\def\labelbeta{\node at (-2.5,-0.5) {$\beta$};} +\def\labelgamma{\node at (2.3,-1.2) {$\gamma$};} +\def\labelomega{\node at (0.85,3.3) {$\omega$};} + +\def\labelgammaone{\node at (2.1,-2.0) {$\gamma_1$};} +\def\labelgammatwo{\node at (2.3,-1.3) {$\gamma_2$};} +\def\labelbetaone{\node at (-2.4,-1.4) {$\beta_1$};} +\def\labelbetatwo{\node at (-2.5,-0.8) {$\beta_2$};} + +\def\labelomegalinks{\node at (0.25,3.25) {$\omega$};} +\def\labelomegarechts{\node at (0.85,3.1) {$\omega$};} + diff --git a/buch/papers/nav/images/position/position1.pdf b/buch/papers/nav/images/position/position1.pdf new file mode 100644 index 0000000..1bd9a69 Binary files /dev/null and b/buch/papers/nav/images/position/position1.pdf differ diff --git a/buch/papers/nav/images/position/position1.pov b/buch/papers/nav/images/position/position1.pov new file mode 100644 index 0000000..a79a9f1 --- /dev/null +++ b/buch/papers/nav/images/position/position1.pov @@ -0,0 +1,71 @@ +// +// position1.pov +// +// (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +// +#version 3.7; +#include "common.inc" + +union { + seite(B, C, fett) + punkt(A, fett) + punkt(B, fett) + punkt(C, fett) + punkt(P, fett) + pigment { + color dreieckfarbe + } + finish { + specular 0.95 + metallic + } +} + +union { + seite(A, P, fett) + pigment { + color rot + } + finish { + specular 0.95 + metallic + } +} + + +union { + seite(A, B, fett) + seite(A, C, fett) + seite(B, P, fett) + seite(C, P, fett) + pigment { + color bekannt + } + finish { + specular 0.95 + metallic + } +} + +object { + winkel(A, B, C, fein, gross) + pigment { + color bekannt + } + finish { + specular 0.95 + metallic + } +} + +object { + winkel(A, P, C, fett, klein) + pigment { + color rot + } + finish { + specular 0.95 + metallic + } +} + diff --git a/buch/papers/nav/images/position/position1.tex b/buch/papers/nav/images/position/position1.tex new file mode 100644 index 0000000..d6c21c3 --- /dev/null +++ b/buch/papers/nav/images/position/position1.tex @@ -0,0 +1,55 @@ +% +% dreieck3d1.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} + +\input{common.tex} + +\newboolean{showgrid} +\setboolean{showgrid}{false} +\def\breite{4} +\def\hoehe{4} + +\begin{tikzpicture}[>=latex,thick] + +% Povray Bild +\node at (0,0) {\includegraphics[width=8cm]{position1.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]; +}{} + +\labelA +\labelB +\labelC +\labelP + +\labelc +\labela +\labelb +\labell + +\labelhb +\labelhc + +\labelalpha +\labelomega + +\end{tikzpicture} + +\end{document} + diff --git a/buch/papers/nav/images/position/position2.pdf b/buch/papers/nav/images/position/position2.pdf new file mode 100644 index 0000000..6015ba1 Binary files /dev/null and b/buch/papers/nav/images/position/position2.pdf differ diff --git a/buch/papers/nav/images/position/position2.pov b/buch/papers/nav/images/position/position2.pov new file mode 100644 index 0000000..2abcd94 --- /dev/null +++ b/buch/papers/nav/images/position/position2.pov @@ -0,0 +1,70 @@ +// +// position3.pov +// +// (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +// +#version 3.7; +#include "common.inc" + +dreieck(A, B, C, kugelfarbe) + +union { + punkt(A, fett) + punkt(B, fett) + punkt(C, fett) + pigment { + color dreieckfarbe + } + finish { + specular 0.95 + metallic + } +} + +union { + seite(A, B, fett) + seite(A, C, fett) + pigment { + color bekannt + } + finish { + specular 0.95 + metallic + } +} + +union { + seite(B, C, fett) + pigment { + color unbekannt + } + finish { + specular 0.95 + metallic + } +} + +object { + winkel(A, B, C, fein, gross) + pigment { + color bekannt + } + finish { + specular 0.95 + metallic + } +} + +union { + winkel(B, C, A, fein, gross) + winkel(C, A, B, fein, gross) + pigment { + color unbekannt + } + finish { + specular 0.95 + metallic + } +} + + diff --git a/buch/papers/nav/images/position/position2.tex b/buch/papers/nav/images/position/position2.tex new file mode 100644 index 0000000..339592c --- /dev/null +++ b/buch/papers/nav/images/position/position2.tex @@ -0,0 +1,53 @@ +% +% position2.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} + +\input{common.tex} + +\newboolean{showgrid} +\setboolean{showgrid}{false} +\def\breite{4} +\def\hoehe{4} + +\begin{tikzpicture}[>=latex,thick] + +% Povray Bild +\node at (0,0) {\includegraphics[width=8cm]{position2.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]; +}{} + +\labelA +\labelB +\labelC + +\labelc +\labela +\labelb + +\begin{scope}[yshift=0.3cm,xshift=0.1cm] +\labelalpha +\end{scope} +\labelbeta +\labelgamma + +\end{tikzpicture} + +\end{document} + diff --git a/buch/papers/nav/images/position/position3.pdf b/buch/papers/nav/images/position/position3.pdf new file mode 100644 index 0000000..dea8c28 Binary files /dev/null and b/buch/papers/nav/images/position/position3.pdf differ diff --git a/buch/papers/nav/images/position/position3.pov b/buch/papers/nav/images/position/position3.pov new file mode 100644 index 0000000..f6823eb --- /dev/null +++ b/buch/papers/nav/images/position/position3.pov @@ -0,0 +1,48 @@ +// +// position3.pov +// +// (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +// +#version 3.7; +#include "common.inc" + +dreieck(B, P, C, kugelfarbe) + +union { + punkt(B, fett) + punkt(C, fett) + punkt(P, fett) + pigment { + color dreieckfarbe + } + finish { + specular 0.95 + metallic + } +} + +union { + seite(B, C, fett) + seite(B, P, fett) + seite(C, P, fett) + pigment { + color bekannt + } + finish { + specular 0.95 + metallic + } +} + +union { + winkel(B, P, C, fein, gross) + winkel(C, B, P, fein, gross) + pigment { + color unbekannt + } + finish { + specular 0.95 + metallic + } +} + diff --git a/buch/papers/nav/images/position/position3.tex b/buch/papers/nav/images/position/position3.tex new file mode 100644 index 0000000..d5480da --- /dev/null +++ b/buch/papers/nav/images/position/position3.tex @@ -0,0 +1,51 @@ +% +% dreieck3d1.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} + +\input{common.tex} + +\newboolean{showgrid} +\setboolean{showgrid}{false} +\def\breite{4} +\def\hoehe{4} + +\begin{tikzpicture}[>=latex,thick] + +% Povray Bild +\node at (0,0) {\includegraphics[width=8cm]{position3.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]; +}{} + +\labelB +\labelC +\labelP + +\labela + +\labelhb +\labelhc + +\labelbetaone +\labelgammaone + +\end{tikzpicture} + +\end{document} + diff --git a/buch/papers/nav/images/position/position4.pdf b/buch/papers/nav/images/position/position4.pdf new file mode 100644 index 0000000..59cd05c Binary files /dev/null and b/buch/papers/nav/images/position/position4.pdf differ diff --git a/buch/papers/nav/images/position/position4.pov b/buch/papers/nav/images/position/position4.pov new file mode 100644 index 0000000..80628f9 --- /dev/null +++ b/buch/papers/nav/images/position/position4.pov @@ -0,0 +1,69 @@ +// +// position4.pov +// +// (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +// +#version 3.7; +#include "common.inc" + +dreieck(A, B, P, kugelfarbe) + +union { + punkt(A, fett) + punkt(B, fett) + punkt(P, fett) + pigment { + color dreieckfarbe + } + finish { + specular 0.95 + metallic + } +} + +union { + seite(A, P, fett) + pigment { + color unbekannt + } + finish { + specular 0.95 + metallic + } +} + + +union { + seite(A, B, fett) + seite(B, P, fett) + pigment { + color bekannt + } + finish { + specular 0.95 + metallic + } +} + +object { + winkel(B, P, A, fein, gross) + pigment { + color bekannt + } + finish { + specular 0.95 + metallic + } +} + +object { + winkel(A, B, P, fein, gross) + pigment { + color unbekannt + } + finish { + specular 0.95 + metallic + } +} + diff --git a/buch/papers/nav/images/position/position4.tex b/buch/papers/nav/images/position/position4.tex new file mode 100644 index 0000000..27c1757 --- /dev/null +++ b/buch/papers/nav/images/position/position4.tex @@ -0,0 +1,50 @@ +% +% position4.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} + +\input{common.tex} + +\newboolean{showgrid} +\setboolean{showgrid}{false} +\def\breite{4} +\def\hoehe{4} + +\begin{tikzpicture}[>=latex,thick] + +% Povray Bild +\node at (0,0) {\includegraphics[width=8cm]{position4.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]; +}{} + +\labelA +\labelB +\labelP + +\labelc +\labell +\labelhb + +\labelomegalinks +\labelbetatwo + +\end{tikzpicture} + +\end{document} + diff --git a/buch/papers/nav/images/position/position5.pdf b/buch/papers/nav/images/position/position5.pdf new file mode 100644 index 0000000..5960392 Binary files /dev/null and b/buch/papers/nav/images/position/position5.pdf differ diff --git a/buch/papers/nav/images/position/position5.pov b/buch/papers/nav/images/position/position5.pov new file mode 100644 index 0000000..7ed33c5 --- /dev/null +++ b/buch/papers/nav/images/position/position5.pov @@ -0,0 +1,69 @@ +// +// position5.pov +// +// (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +// +#version 3.7; +#include "common.inc" + +dreieck(A, P, C, kugelfarbe) + +union { + punkt(A, fett) + punkt(C, fett) + punkt(P, fett) + pigment { + color dreieckfarbe + } + finish { + specular 0.95 + metallic + } +} + +union { + seite(A, P, fett) + pigment { + color unbekannt + } + finish { + specular 0.95 + metallic + } +} + + +union { + seite(A, C, fett) + seite(C, P, fett) + pigment { + color bekannt + } + finish { + specular 0.95 + metallic + } +} + +object { + winkel(C, P, A, fein, gross) + pigment { + color bekannt + } + finish { + specular 0.95 + metallic + } +} + +object { + winkel(A, C, P, fein, gross) + pigment { + color unbekannt + } + finish { + specular 0.95 + metallic + } +} + diff --git a/buch/papers/nav/images/position/position5.tex b/buch/papers/nav/images/position/position5.tex new file mode 100644 index 0000000..b234429 --- /dev/null +++ b/buch/papers/nav/images/position/position5.tex @@ -0,0 +1,50 @@ +% +% position5.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} + +\input{common.tex} + +\newboolean{showgrid} +\setboolean{showgrid}{false} +\def\breite{4} +\def\hoehe{4} + +\begin{tikzpicture}[>=latex,thick] + +% Povray Bild +\node at (0,0) {\includegraphics[width=8cm]{position5.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]; +}{} + +\labelA +\labelC +\labelP + +\labelb +\labell +\labelhc + +\labelomegarechts +\labelgammatwo + +\end{tikzpicture} + +\end{document} + -- cgit v1.2.1