Dibujar la bandera india usando tikz

Dibujar la bandera india usando tikz

Estoy intentando dibujar una bandera india usando ideas deaquíy otros, incluido un símbolo del chakra Ashok deejemplo al dorso. Quiero tener la codificación adecuada con las dimensiones correctas mencionadas enWikipedia. Tengo una duda sobre el tamaño del Ashok-Chakra. ¡Alguien me ayuda por favor! Mi MWE se proporciona a continuación:

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

La salida se ve así: ingrese la descripción de la imagen aquí

Respuesta1

Para hacer cumplir las nueve medidas diferentes, se puede utilizar el .is choicecontrolador de claves del pgfkeysmaterial. He vuelto a implementar el código de la bandera (que probablemente necesite más modificaciones para obtener los detalles de Ashoka Chakra exactamente correctamente). Tenga en cuenta que para tamaños más grandes de bandera, los vectores xy ydeben cambiarse para evitar dimension too largeerrores:

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

ingrese la descripción de la imagen aquí

Respuesta2

Tienes más problemas:

  • Poner picel propio tikzpicturees un enfoque incorrecto.
  • Debido a scaleboxque necesita picutilizar coordenadas multiplicadas con el inverso del factor de escala.

ingrese la descripción de la imagen aquí

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

Se obtienen mejores resultados si no se utilizan scaleboxy escalan manualmente todas las coordenadas en picfiguras:

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

En el MWE anterior, los estilos ashokchakrase mueventikzpicture

ingrese la descripción de la imagen aquí

Respuesta3

inspirado en una de las soluciones aquí, sin anidados tikzpicturey con un ligero cambio de rueda. También escala muy bien.

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

ingrese la descripción de la imagen aquí

información relacionada