Verhindern Sie die Verschiebung des Schattierungsmittelpunkts bei Verwendung relativer Koordinaten

Verhindern Sie die Verschiebung des Schattierungsmittelpunkts bei Verwendung relativer Koordinaten

Ich schreibe einige Makros, die das Zeichnen von Ballformen in beliebiger Weise in \foreachSchleifen ermöglichen:

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

Ausgabe

Ich verwende relative Koordinaten, um die Verwendung von Polarkoordinaten zu ermöglichen, die nicht am Ursprung zentriert sind, wie oben zu sehen ist. Leider funktioniert meine Schattierung nicht wie erwartet.

Ich hoffe, ein Ergebnis wie dieses zu erhalten, aber unter Verwendung der relativen Koordinaten:

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

Erwartete Ausgabe

Es scheint, dass der Schattierungsalgorithmus nicht berücksichtigt, dass der Mittelpunkt der gezeichneten Kreise relativ zu (0,0) verschoben wird. Ist es möglich, den Ursprung der Schattierung neu zu definieren?

Antwort1

Um den Begrenzungsrahmen Ihres schattierten Pfades einzuschränken, sollte der Basispunkt nicht in diesem Pfad erscheinen.

Hier sind vier Lösungen:

  • \ballshift: wende eine shiftOperation auf dein Zentrum an,
  • \ballscope: Verwenden Sie ein Lokal scopemit verschobenem Ursprung.
  • \ballcalc: verwenden Sie calc, um Ihren Mittelpunkt zu verschieben,
  • \ballnode: Verwenden Sie einen Kreisknoten mit Schattierung.

Bildbeschreibung hier eingeben

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

verwandte Informationen