Sterne mit Flaggenfarben

Tabellen und Grafiken erstellen und anordnen


Beinschuss
Forum-Meister
Forum-Meister
Beiträge: 809
Registriert: Di 2. Okt 2012, 21:42
Wohnort: NRW

Sterne mit Flaggenfarben

Beitrag 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

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag 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}
Bild
Dateianhänge
gl_stern.png
gl_stern.png (7.67 KiB) 2138 mal betrachtet

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2456
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Beitrag 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.

Beinschuss
Forum-Meister
Forum-Meister
Beiträge: 809
Registriert: Di 2. Okt 2012, 21:42
Wohnort: NRW

Beitrag 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}
Bild
Dateianhänge
flaggenstern-rumkl.png
flaggenstern-rumkl.png (17.74 KiB) 2146 mal betrachtet

Beinschuss
Forum-Meister
Forum-Meister
Beiträge: 809
Registriert: Di 2. Okt 2012, 21:42
Wohnort: NRW

Beitrag 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?

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2456
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Beitrag 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}

Antworten