
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}
Respuesta1
Para hacer cumplir las nueve medidas diferentes, se puede utilizar el .is choice
controlador de claves del pgfkeys
material. 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 x
y y
deben cambiarse para evitar dimension too large
errores:
\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}
Respuesta2
Tienes más problemas:
- Poner
pic
el propiotikzpicture
es un enfoque incorrecto. - Debido a
scalebox
que necesitapic
utilizar coordenadas multiplicadas con el inverso del factor de escala.
\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 scalebox
y escalan manualmente todas las coordenadas en pic
figuras:
\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 ashokchakra
se mueventikzpicture
Respuesta3
inspirado en una de las soluciones aquí, sin anidados tikzpicture
y 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}