\documentclass{minimal} \usepackage{tikz} \usetikzlibrary{shapes,backgrounds} \newcommand{\tstar}[5]{% inner radius, outer radius, tips, rot angle, options \pgfmathsetmacro{\starangle}{360/#3} \draw[#5] (#4:#1) \foreach \x in {1,...,#3} { -- (#4+\x*\starangle-\starangle/2:#2) -- (#4+\x*\starangle:#1) } -- cycle; } \begin{document} \begin{tikzpicture} \tstar{2}{4}{5}{-17}{thick,fill, top color=black, bottom color=yellow, middle color=red}; \end{tikzpicture} \end{document}
Sterne mit Flaggenfarben
-
- Forum-Meister
- Beiträge: 809
- Registriert: Di 2. Okt 2012, 21:42
- Wohnort: NRW
Sterne mit Flaggenfarben
Ich möchte Sterne in Flaggenfarben mit TiKZ erstellen. Ich möchte aber keinen Farbverlauf haben, wie im Minimalbeispiel, sondern scharfe Trennungen der drei Farben (z. B. Deutschland: schwarz oben, rot in der Mitte, gelb unten), und stehe gerade auf dem Schlauch. Wie kann's gehen?
Den Code für den Stern habe ich hierher: https://tex.stackexchange.com/questions ... background
Beispielsweise:
\documentclass[margin=5pt]{standalone} \usepackage{tikz} \newcommand{\tstar}[5]{% inner radius, outer radius, tips, rot angle, options \pgfmathsetmacro{\starangle}{360/#3} \path[#5]% eventuell path statt draw (#4:#1) \foreach \x in {1,...,#3} { -- (#4+\x*\starangle-\starangle/2:#2) -- (#4+\x*\starangle:#1) } -- cycle; } \begin{document} \begin{tikzpicture} \tstar{2}{4}{5}{-17}{ thick, %draw, path picture={% \path(current path bounding box.north west)--(current path bounding box.south east) coordinate[pos=0] (temp1) coordinate[pos=.3333](temp2) coordinate[pos=.6666](temp3) coordinate (temp4) ; \fill[black] (temp1) rectangle (temp2-|temp4); \fill[red] (temp1|-temp2) rectangle (temp3-|temp4); \fill[yellow] (temp1|-temp3) rectangle (temp4); } } \end{tikzpicture} \end{document}
- Dateianhänge
-
- gl_stern.png (7.67 KiB) 2138 mal betrachtet
-
- Forum-Meister
- Beiträge: 809
- Registriert: Di 2. Okt 2012, 21:42
- Wohnort: NRW
Danke, Elke, danke Bartman, klappt prima. Hier noch die gedrehte Variante (Beispiel: Rumänien), falls es jemanden interessiert:
\documentclass[margin=5pt]{standalone} \usepackage{tikz} \newcommand{\tstar}[5]{% inner radius, outer radius, tips, rot angle, options \pgfmathsetmacro{\starangle}{360/#3} \path[#5]% eventuell path statt draw (#4:#1) \foreach \x in {1,...,#3} { -- (#4+\x*\starangle-\starangle/2:#2) -- (#4+\x*\starangle:#1) } -- cycle; } \begin{document} \begin{tikzpicture} \tstar{2}{5}{5}{180}{ thick, rotate=90, draw, path picture={% \path(current path bounding box.north west)--(current path bounding box.south east) coordinate[pos=0] (temp1) coordinate[pos=.375](temp2) %Anpassung der Position an der oberen Sternbreite, nicht mathematisch genau 1/3. coordinate[pos=.625](temp3) coordinate (temp4) ; \fill[blue] (temp1) rectangle (temp2-|temp4); \fill[yellow] (temp1|-temp2) rectangle (temp3-|temp4); \fill[red] (temp1|-temp3) rectangle (temp4); } } \end{tikzpicture} \end{document}
- Dateianhänge
-
- flaggenstern-rumkl.png (17.74 KiB) 2146 mal betrachtet
-
- Forum-Meister
- Beiträge: 809
- Registriert: Di 2. Okt 2012, 21:42
- Wohnort: NRW
Ich habe mich nochmal mit einem älteren Beispiel beschäftigt. Wenn man die Shapes-Library benutzt, kann man einen solchen Stern in Landesfarben auch so setzen:
Bei der zweiten Variante musste ich die Länge der lotrechten Linie manuell ermitteln (yshift). Geht das noch eleganter?
\documentclass[margin=5pt]{standalone} \usepackage{tikz} \usetikzlibrary{shapes} \begin{document} \begin{tikzpicture} \node [name=D,star,star point height=.5cm, minimum size=2cm] at (1,1){}; \fill[black] (D.outer point 2) -- (D.inner point 1) -- (D.outer point 1) -- (D.inner point 5) -- (D.outer point 5); \fill[red] (D.outer point 2) -- (D.outer point 5) -- (D.inner point 4) -- (D.inner point 2); \fill[yellow] (D.inner point 2) -- (D.inner point 4) -- (D.outer point 4) -- (D.inner point 3) -- (D.outer point 3); \end{tikzpicture} \begin{tikzpicture} \node [name=R,star,star point height=.5cm, minimum size=2cm] at (1,1){}; \fill[blue] (R.inner point 1) -- (R.outer point 2) -- (R.inner point 2) -- (R.outer point 3) -- ([yshift=-1.07cm]R.inner point 1); \fill[yellow] (R.inner point 1) -- (D.north) -- (D.inner point 5) -- ([yshift=-1.07cm]D.inner point 5) -- (R.south) -- ([yshift=-1.07cm]R.inner point 1); \fill[red] (R.inner point 5) -- (R.outer point 5) -- (R.inner point 4) -- (R.outer point 4) -- ([yshift=-1.07cm]R.inner point 5); \end{tikzpicture} \end{document}
Mein Vorschlag arbeitet mit der intersections-Bibliothek:
\documentclass[tikz, border=1pt]{standalone} \usetikzlibrary{shapes, intersections} \begin{document} \begin{tikzpicture} \node [name=R, star, star point height=.5cm, minimum size=2cm] {}; \path [name path=left vertical] (R.inner point 1) |- (R.outer point 3); \path [name path=left diagonal] (R.south) -- (R.outer point 3); \path [name intersections={of=left vertical and left diagonal, by=left intersection}]; \path [name path=right vertical] (R.inner point 5) |- (R.outer point 4); \path [name path=right diagonal] (R.south) -- (R.outer point 4); \path [name intersections={of=right vertical and right diagonal, by=right intersection}]; \fill [blue] (R.inner point 1) -- (R.outer point 2) -- (R.inner point 2) -- (R.outer point 3) -- (left intersection); \fill [yellow] (R.inner point 1) -- (R.north) -- (R.inner point 5) -- (right intersection) -- (R.south) -- (left intersection); \fill [red] (R.inner point 5) -- (R.outer point 5) -- (R.inner point 4) -- (R.outer point 4) -- (right intersection); \end{tikzpicture} \end{document}