更智能的绘图方式

更智能的绘图方式

考虑以下 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}

输出如下:

射击

射击

射击

我的问题是:有没有更聪明的方法来绘制这样的东西?计算不需要很长时间,但我确信有更好的方法来做到这一点……


一个动画 .gif(对于嵌入式 imgur 服务来说太大)。这里是其他一。

答案1

恭喜你写出了出色的代码和结果!在我看来,改进代码的最佳方法是使用pics,但这已经被在他的评论中提到了 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}

输出基本上和你的一样。

在此处输入图片描述

一个区别是,你可以将图表与 TiZ 方法,另一种方法可能是您可以修饰整个路径(而不是单个延伸),但我还没有想到任何巧妙的应用。因此,尚不清楚这种方法是否真的“更好”。

相关内容