如何在 tikz 中复制后进行旋转

如何在 tikz 中复制后进行旋转

以下代码绘制了三个菱形,它们的端点固定在 (0,0)。有人能建议一种更好的方法来做同样的事情吗,比如绘制一个菱形,然后像复制一样旋转它们?谢谢!

\documentclass[10pt,a4paper]{article}
\usepackage{tikz}
\begin{document}
\begin{figure}
\begin{picture}(215,20)(0,0)
\begin{tikzpicture}

\pgftransformshift{\pgfpoint{90}{0}}; 
\filldraw[scale=1,color=black](0,0) circle(7cm); % plate
\filldraw[scale=1,white] (0,0)--++(120:2.966)--++(60:2.966)--++(300:2.966)--++(240:2.966) ;
\filldraw[scale=1,white] (0,0)--++(180:2.966)--++(240:2.966)--++(0:2.966)--++(60:2.966) ;
\filldraw[scale=1,white] (0,0)--++(0:2.966)--++(300:2.966)--++(180:2.966)--++(120:2.966) ;

\end{tikzpicture}  
\end{picture}  
\end{figure} 
\end{document}

答案1

如果您只是想减少击键次数并避免手动计算角度,最简单的方法可能是使用循环foreach

\documentclass[10pt,a4paper]{article}
\usepackage{tikz}
\begin{document}
\begin{figure}
\begin{picture}(215,20)(0,0)
\begin{tikzpicture}

\pgftransformshift{\pgfpoint{90}{0}}; 
\filldraw[scale=1,color=black](0,0) circle(7cm); % plate

\foreach \angle in {0,120,240}
  \filldraw[scale=1,white,rotate=\angle] (0,0)--++(120:2.966)--++(60:2.966)--++(300:2.966)--++(240:2.966) ;

\end{tikzpicture}  
\end{picture}  
\end{figure} 
\end{document}

答案2

如上所述,使用旋转选项。您实际上无法复制 TikZ 内容。将坐标存储在宏中更简单:

\documentclass[10pt,a4paper]{article}
\usepackage{tikz}
\newcommand*\mydiamond{--++(120:2.966)--++(60:2.966)--++(300:2.966)--++(240:2.966)}

\begin{document}

\begin{figure}
\begin{tikzpicture}
\pgftransformshift{\pgfpoint{90}{0}}; 
\filldraw[scale=1,color=black](0,0) circle(7cm); % plate
\filldraw[scale=1,white] (0,0) \mydiamond ;
\filldraw[scale=1,white,rotate=120] (0,0) \mydiamond ;
\filldraw[scale=1,white,rotate=240] (0,0) \mydiamond ;
\end{tikzpicture}
\end{figure}

\end{document}

第一个坐标(0,0)不是宏的一部分,因此无法在其他地方重复使用。顺便说一句:picture不需要环境。

答案3

可以删除一些无用的东西。我删除了图片环境和 \pgftransformshift 和 scale =1。默认颜色为黑色。

\documentclass[10pt,a4paper]{article}
\usepackage{tikz,fullpage}
\begin{document}

\begin{figure}[h]
\begin{tikzpicture}
\filldraw (0,0) circle(7cm);
\foreach \angle in {0,120,240}
  \filldraw[color=white,rotate=\angle] (0,0)--++(120:3)--++(60:3)--++(300:3)--++(240:3);
\end{tikzpicture}  
\end{figure}
\end{document} 

答案4

\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}

\begin{document}
  \begin{tikzpicture}
    \fill (0:0) circle (7cm);
    \foreach \r in {90,210,330}
      \node[fill=white,shape=diamond,aspect=1.725,scale=9,rotate=\r] (a) at (\r:2.85) {};
  \end{tikzpicture}  
\end{document}

相关内容