考虑以下 MWE:
\documentclass[border=5pt]{article}
\usepackage{tikz,anysize}
\marginsize{0cm}{0cm}{0cm}{0cm}
\definecolor{forest}{RGB}{34,139,34}
\definecolor{rot}{RGB}{220,20,60}
\definecolor{blau}{RGB}{0,191,255}
\definecolor{mitter}{RGB}{25,25,112}
\definecolor{ora}{RGB}{255,69,0}
\newcommand{\nice}[3]{
\begin{tikzpicture}[scale=.2]
\pgfmathsetmacro{\w}{360/#1}
\pgfmathsetmacro{\q}{360-\w}
\pgfmathsetmacro{\f}{#1/10}
% \pgfmathsetmacro{\f}{17}
\foreach \x in {0,\w,...,\q}
{
\pgfmathsetmacro{\sch}{#2*\x+\w}
\draw[#3] (\x:\f) -- (\sch:\f);
}
\end{tikzpicture}
}
\begin{document}
\thispagestyle{empty}
\centering
\begin{tabular}{rl}
\nice{200}{2}{orange!60!yellow} & \nice{200}{3}{forest} \\
\nice{200}{4}{rot} & \nice{200}{5}{blau} \\
\nice{200}{5}{mitter} & \nice{200}{6}{ora}
\end{tabular}
\end{document}
输出如下:
我的问题是:有没有更聪明的方法来绘制这样的东西?计算不需要很长时间,但我确信有更好的方法来做到这一点……
答案1
恭喜你写出了出色的代码和结果!在我看来,改进代码的最佳方法是使用pic
s,但这已经被在他的评论中提到了 Loop Space。所以我发布了另一种方法:insert path
。这样,您可以使用的常用选项控制线条样式等\draw
。(当然,您的好宏也允许您这样做,接下来的内容可能只是被视为更 Ti钾唷。
\documentclass[tikz,border=3.14mm]{standalone} % the biggest improvement is "border=3.14mm" ;-)
\definecolor{forest}{RGB}{34,139,34}
\definecolor{rot}{RGB}{220,20,60}
\definecolor{blau}{RGB}{0,191,255}
\definecolor{mitter}{RGB}{25,25,112}
\definecolor{ora}{RGB}{255,69,0}
\tikzset{nice/.style n args={2}{insert path={foreach \x in {1,...,#1}
{
({((\x-1)/#1)*360}:{#1/10}) -- ({#2*((\x-1)/#1)*360}:{#1/10})
}}}}
\begin{document}
\thispagestyle{empty}
\centering
\begin{tikzpicture}[scale=0.2]
\draw[orange!60!yellow,shift={(0,0)},nice={200}{2}];
\draw[forest,shift={(50,0)},nice={200}{3}];
\draw[rot,shift={(0,-50)},nice={200}{4}];
\draw[blau,shift={(50,-50)},nice={200}{5}];
\draw[mitter,shift={(0,-100)},nice={200}{5}];
\draw[ora,shift={(50,-100)},nice={200}{6}];
\end{tikzpicture}
\end{document}
输出基本上和你的一样。
一个区别是,你可以将图表与 Ti钾Z 方法,另一种方法可能是您可以修饰整个路径(而不是单个延伸),但我还没有想到任何巧妙的应用。因此,尚不清楚这种方法是否真的“更好”。