防止使用相对坐标时阴影中心点发生偏移

防止使用相对坐标时阴影中心点发生偏移

\foreach我正在编写一些宏,允许在循环中以任意方式绘制球形:

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

输出

我使用相对坐标是为了允许使用不以原点为中心的极坐标,如上所示。不幸的是,我的阴影效果不如我预期。

我希望得到这样的结果,但使用相对坐标:

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

预期输出

似乎着色算法没有考虑到绘制的圆心相对于 (0,0) 的移动。是否可以重新定义着色的原点?

答案1

为了限制阴影路径的边界框,基点​​不应出现在此路径中。

以下是四种解决方案:

  • \ballshiftshift在你的中心使用操作,
  • \ballscopescope:使用具有移位原点的本地,
  • \ballcalc:用来calc转移你的重心,
  • \ballnode:使用带阴影的圆形节点。

在此处输入图片描述

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

相关内容