Indische Flagge mit Tikz zeichnen

Indische Flagge mit Tikz zeichnen

Ich versuche, eine indische Flagge zu zeichnen, mit Ideen ausHierund andere, darunter ein Ashok-Chakra-Symbol ausBeispiel auf der Rückseite. Ich möchte die richtige Kodierung mit den korrekten Abmessungen haben, die unterWikipedia. Ich habe Zweifel bezüglich der Größe des Ashok-Chakras. Kann mir bitte jemand helfen? Mein MWE ist unten angegeben:

\documentclass[tikz]{standalone}


\definecolor{saffron}{HTML}{FF9933} % top stripe
\definecolor{white}{HTML}{FFFFFF} % middle stripe
\definecolor{indiegreen}{HTML}{138808} % bottom stripe
\definecolor{navyblue}{HTML}{000080} % ashok chakra

\tikzstyle{bharat}=[draw=navyblue,fill=navyblue]

\begin{document}
\begin{tikzpicture}
    \fill[saffron] (0,400mm) rectangle (900mm,600mm);
    \fill[white] (0,200mm) rectangle (900mm,400mm);
    \fill[indiegreen] (0,0) rectangle (900mm,200mm);
    \node at (450mm,300mm)[scale=0.09]{%
    \begin{tikzpicture}
        \draw[bharat, even odd rule] (0,0) circle (92.5) (0,0) circle (80); 
        \draw[bharat] (0,0) circle (16);
        \foreach \x in {0,..., 23}{
            \draw[bharat] (7.5+15*\x:80) circle (3.5); 
            \draw[bharat, rotate=15*\x] (0,0)--(5.38:32)--(80,0)--(-5.38:32)--cycle; 
        }
    \end{tikzpicture}
    };
\end{tikzpicture}
\end{document}

Die Ausgabe sieht wie folgt aus: Bildbeschreibung hier eingeben

Antwort1

Um die neun verschiedenen Maße zu erzwingen, kann man den .is choiceKey-Handler aus dem pgfkeysMaterial verwenden. Ich habe den Flag-Code neu implementiert (der wahrscheinlich noch mehr Fummelei braucht, um die Details von Ashoka Chakra genau richtig hinzubekommen). Beachten Sie, dass für die größeren Größen des Flags die xund yVektoren geändert werden müssen, um dimension too largeFehler zu vermeiden:

\documentclass[tikz,border=5]{standalone}
\definecolor{saffron}{HTML}{FF9933}
\definecolor{white}{HTML}{FFFFFF}
\definecolor{indiegreen}{HTML}{138808}
\definecolor{navyblue}{HTML}{000080}
\tikzset{%
  flag width/.store in=\flagwidth,
  flag height/.store in=\flagheight,
  flag size/.style args={#1x#2}{flag width=#1, flag height=#2},
  Ashoka Chakra/.store in=\AshokaChakra,
  size/.is choice,
  size/.cd,
    1/.style={flag size=6300x4200, Ashoka Chakra=1295},
    2/.style={flag size=3600x2400, Ashoka Chakra=740},
    3/.style={flag size=2700x1800, Ashoka Chakra=555},
    4/.style={flag size=1800x1200, Ashoka Chakra=370},
    5/.style={flag size=1350x900, Ashoka Chakra=280},
    6/.style={flag size=900x600, Ashoka Chakra=185},
    7/.style={flag size=450x300, Ashoka Chakra=90},
    8/.style={flag size=225x150, Ashoka Chakra=40},
    9/.style={flag size=150x100, Ashoka Chakra=25},
  /tikz/.cd,
  Flag of India/.pic={%
    \begin{scope}[#1,
    local bounding box/.expanded=\pgfkeysvalueof{/tikz/name prefix}]%
    \foreach \stripecolor [count=\i from 0] in {indiegreen, white, saffron}
      \path [fill=\stripecolor]
      (-\flagwidth/2, \i/3*\flagheight-\flagheight/2)
      rectangle ++(\flagwidth, 1/3*\flagheight);
    \tikzset{scale=\AshokaChakra/2}
    \path [fill=navyblue, even odd rule]
      circle [radius=1] circle [radius=22/25] circle [radius=1/5];
    \foreach \i in {0,...,23}
       \path [fill=navyblue] (15/2+15*\i:22/25) circle [radius=1/20] 
       [rotate=15*\i] (0:0) -- (21/4:1/3) -- (0:7/8)-- (-21/4:1/3)--cycle;
     \end{scope}
 },
 Flag of India/.default={size=9}  
}
\begin{document}
\begin{tikzpicture}[x=1mm, y=1mm]
\coordinate (flag);
\foreach \size in {5,...,9}
  \pic at (flag.south) (flag)
    {Flag of India={size=\size, shift=(270:\flagheight*3/4)}};
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Antwort2

Sie haben weitere Probleme:

  • Eigeninitiative picist tikzpicturefalsch
  • Aufgrund scaleboxIhres Bedarfs picmüssen die Koordinaten mit dem Kehrwert des Skalierungsfaktors multipliziert werden.

Bildbeschreibung hier eingeben

\documentclass[tikz, border=3mm]{standalone}

\definecolor{saffron}{HTML}{FF9933} % top stripe
\definecolor{white}{HTML}{FFFFFF} % middle stripe
\definecolor{indiegreen}{HTML}{138808} % bottom stripe
\definecolor{navyblue}{HTML}{000080} % ashok chakra


\tikzset{
    estilo/.style = {draw=navyblue,fill=navyblue},% moved here
  ashokchakra/.pic ={
\scalebox{0.1}{
%\begin{tikzpicture} % <-- had to be deleted
    \draw[estilo, even odd rule] (0,0) circle (92.5) (0,0) circle (80);
    \draw[estilo] (0,0) circle (16);
    \foreach \x in {0,..., 23}{
        \draw[estilo] (7.5+15*\x:80) circle (3.5);
        \draw[estilo, rotate=15*\x] (0,0)--(5.38:32)--(80,0)--(-5.38:32)--cycle;
    \node{ \tikzpictext};
    }
%\end{tikzpicture} % <-- had to be deleted
}}}

\begin{document}
\begin{tikzpicture}
    \fill[saffron]      (0,40) rectangle (90,60);
    \fill[white]        (0,20) rectangle (90,40);
    \fill[indiegreen]   (0, 0) rectangle (90,20);
    \pic at (450,300) {ashokchakra};% <-- since you use scalebox
\end{tikzpicture}
\end{document}

Bessere Ergebnisse erzielen Sie, wenn Sie scaleboxalle Koordinaten in den Abbildungen nicht manuell skalieren pic:

\documentclass[tikz, border=3mm]{standalone}
\definecolor{saffron}{HTML}{FF9933} % top stripe
\definecolor{white}{HTML}{FFFFFF} % middle stripe
\definecolor{indiegreen}{HTML}{138808} % bottom stripe
\definecolor{navyblue}{HTML}{000080} % ashok chakra

\begin{document}
\begin{tikzpicture}[
    estilo/.style = {draw=navyblue,fill=navyblue},% moved here
  ashokchakra/.pic ={
    \draw[estilo, even odd rule] (0,0) circle (9.25) (0,0) circle (8);
    \draw[estilo] (0,0) circle (1.6);
    \foreach \x in {0,..., 23}
    {
    \draw[estilo] (0.75+15*\x:8.0) circle (0.35);
    \draw[estilo, rotate=15*\x] (0,0)--(0.538:3.2)--(8.0,0)--(-5.38:3.2)--cycle;
    }
    }%end of pic
                ]
    \fill[saffron]      (0,40) rectangle (90,60);
    \fill[white]        (0,20) rectangle (90,40);
    \fill[indiegreen]   (0, 0) rectangle (90,20);
    \pic at (45,30) {ashokchakra};% <-- since you use scalebox
\end{tikzpicture}
\end{document}

Im obigen MWE ashokchakrawerden die Stile für verschobentikzpicture

Bildbeschreibung hier eingeben

Antwort3

inspiriert von einer der Lösungen hier, ohne verschachtelte tikzpicture's und mit einer kleinen Änderung des Rades. Lässt sich auch gut skalieren.

\documentclass[tikz]{standalone}

\definecolor{kesara}{HTML}{FF9933} % top stripe
\definecolor{madhya}{HTML}{FFFFFF} % middle stripe
\definecolor{harita}{HTML}{138808} % bottom stripe
\definecolor{ashokaneela}{HTML}{000080} % ashok chakra

\usetikzlibrary{calc,fit}
\tikzset{
  bharat/.style={ draw=ashokaneela,fill=ashokaneela }
}

\begin{document}
\begin{tikzpicture}[scale=.9]
  \fill [kesara] (0,400mm) rectangle (900mm,600mm);
  \node (mid) [fit={ (0,200mm) (900mm,400mm) }, rectangle, inner sep=0, fill=madhya] {};
  \fill [harita] (0,0) rectangle (900mm,200mm);
  \fill (mid) [ashokaneela] circle (93mm) ;
  \fill (mid) [white] circle (80mm) ;
  \fill (mid) [ashokaneela] circle (16mm) ;
  \foreach \x in {0,..., 23}{
  \fill [ashokaneela] ($ (mid) + (7.5+15*\x:80mm) $) circle (4mm) ; 
  \fill [ashokaneela, rotate around = {15*\x:(mid)}] 
        ($ (mid) + (10mm,0) $) -- +(26mm,-3mm) -- 
        ($ (mid) + (92mm,0) $) -- +(-56mm,3mm) -- cycle ; 
  }
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen