Seite 1 von 1
Sterne mit Flaggenfarben
Verfasst: Sa 17. Jun 2017, 23:26
von Beinschuss
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?
\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}
Den Code für den Stern habe ich hierher:
https://tex.stackexchange.com/questions ... background
Verfasst: So 18. Jun 2017, 04:57
von esdd
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}

Verfasst: So 18. Jun 2017, 07:14
von Bartman
Meine virtuelle Wasserwaage empfiehlt eine -18 als viertes Argument von \tstar.
Der Wert, welcher der Option pos zugewiesen wird, darf offenbar auch als Bruch angegeben werden.
Verfasst: So 18. Jun 2017, 18:04
von Beinschuss
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}

Verfasst: Sa 20. Jan 2018, 22:08
von Beinschuss
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:
\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}
Bei der zweiten Variante musste ich die Länge der lotrechten Linie manuell ermitteln (yshift). Geht das noch eleganter?
Verfasst: So 21. Jan 2018, 13:50
von Bartman
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}