
Estoy escribiendo algunas macros que permiten dibujar formas de bolas de forma arbitraria en \foreach
bucles:
\documentclass[tikz, border=0.5in]{standalone}
\newcommand{\ball}[3][0,0]{%\ball[basepoint]{point}{diameter}
\shadedraw[ball color=blue!15!white, draw=blue!50] (#1) +(#2) circle (#3);
}
\begin{document}
\begin{tikzpicture}
\foreach \t in {10, 20, ..., 360}{
\ball{\t:6}{0.5}
}
\ball{0,0}{0.5}
\foreach \t in {10, 20, ..., 360}{
\ball[14,0]{\t:6}{0.5}
}
\ball{14,0}{0.5}
\end{tikzpicture}
\end{document}
Estoy usando coordenadas relativas para permitir el uso de coordenadas polares no centradas en el origen, como se puede ver arriba. Desafortunadamente, mi sombreado no funciona como esperaba.
Espero obtener un resultado como este, pero usando las coordenadas relativas:
\documentclass[tikz, border=0.5in]{standalone}
\begin{document}
\begin{tikzpicture}
\foreach \t in {10, 20, ..., 360}{
\shadedraw[ball color=blue!15!white, draw=blue!50] (\t:6) circle (0.5);
}
\shadedraw[ball color=blue!15!white, draw=blue!50] (0,0) circle (0.5)
\end{tikzpicture}
\end{document}
Parece que el algoritmo de sombreado no tiene en cuenta que el centro de los círculos dibujados se mueve en relación con (0,0). ¿Es posible redefinir el origen del sombreado?
Respuesta1
Para limitar el cuadro delimitador de su trazado sombreado, el punto base no debe aparecer en este trazado.
Aquí hay cuatro soluciones:
\ballshift
: utilice unashift
operación en su centro,\ballscope
: utilizar un localscope
con un origen desplazado,\ballcalc
: utilícelocalc
para cambiar su centro,\ballnode
: utilice un nodo circular con sombreado.
\documentclass[tikz, border=0.5in]{standalone}
\usetikzlibrary{calc}
\newcommand{\ballshift}[3][0,0]{%\ball[basepoint]{point}{diameter}
\shadedraw[ball color=blue!15!white, draw=blue!50] ([shift={(#1)}]#2) circle (#3);
}
\newcommand{\ballscope}[3][0,0]{%\ball[basepoint]{point}{diameter}
\begin{scope}[shift={(#1)}]
\shadedraw[ball color=red!15!white, draw=red!50] (#2) circle (#3);
\end{scope}
}
\newcommand{\ballcalc}[3][0,0]{%\ball[basepoint]{point}{diameter}
\shadedraw[ball color=orange!15!white, draw=orange!50] ($(#1)+(#2)$) circle (#3);
}
\newcommand{\ballnode}[3][0,0]{%\ball[basepoint]{point}{diameter}
\path (#1) ++(#2) node[inner sep=0,circle,minimum size=2cm*#3,
ball color=lime!50!white,draw=lime]{};
}
\begin{document}
\begin{tikzpicture}
\foreach \t in {10, 20, ..., 360}{
\ballshift{\t:6}{0.5}
\ballscope{\t:5}{0.4}
\ballcalc{\t:4}{0.3}
\ballnode{\t:3}{0.2}
}
\ballshift{0,0}{0.5}
\foreach \t in {10, 20, ..., 360}{
\ballshift[14,0]{\t:6}{0.5}
\ballscope[14,0]{\t:5}{0.4}
\ballcalc[14,0]{\t:4}{0.3}
\ballnode[14,0]{\t:3}{0.2}
}
\ballshift{14,0}{0.5}
\end{tikzpicture}
\end{document}