如何在 tikz 中恰当地使用带圆弧的循环?

如何在 tikz 中恰当地使用带圆弧的循环?

这是我的代码,正如您所见,它非常简单。

但我知道如果适当使用,可以更容易地编写它\for

不幸的是,我仍在学习,似乎无法让它与 一起工作arc。我主要关心的是 的起源arc,它应该以某种方式传播……

\documentclass[letterpaper, 12pt]{article}
\usepackage{tikz}
\begin{document}

\begin{center}
  \begin{tikzpicture}[yscale=-1]

   \foreach \a in {0, 5,...,45}
     \draw[Azure4] (\a:6.7) -- (\a:7);
     \draw[very thick] (7,0) arc (0:45:7cm);
   \foreach \a in {90, 95,...,135} 
     \draw[Azure4] (\a:6.7) -- (\a:7);
     \draw[very thick] (0,7) arc (90:135:7cm);
   \foreach \a in {180, 185,...,225} 
     \draw[Azure4] (\a:6.7) -- (\a:7);
     \draw[very thick] (-7,0) arc (180:225:7cm);
   \foreach \a in {270, 275,...,315}
     \draw[Azure4] (\a:6.7) -- (\a:7);
     \draw[very thick] (0,-7) arc (270:315:7cm);



   \foreach \a in {45, 50,...,90}
     \draw[Azure4] (\a:4.7) -- (\a:5);
     \draw[very thick] (0,5) arc (90:45:5cm);
   \foreach \a in {135, 140,...,180} 
     \draw[Azure4] (\a:4.7) -- (\a:5);
     \draw[very thick] (-5,0) arc (180:135:5cm);
   \foreach \a in {225, 230,...,270} 
     \draw[Azure4] (\a:4.7) -- (\a:5);
     \draw[very thick] (0,-5) arc (270:225:5cm);
   \foreach \a in {315, 320,...,359}
     \draw[Azure4] (\a:4.7) -- (\a:5);
     \draw[very thick] (5,0) arc (360:315:5cm);



%Main rays
\foreach \a in {0, 45,...,359}
    \draw[very thick] (\a:0) -- (\a:7); 

%Main rays
\foreach \a in {0, 90,...,359}
  \draw[very thick] (0, 0) -- (\a:7);

%Central point
\draw[fill=black] (0,0) circle(0.7mm);
\end{tikzpicture}
\end{center}

\end{document}

结果

所以我已经可以简化一些东西,但我仍然无法简化部分arc

\documentclass[letterpaper, 12pt]{article}
\usepackage{tikz}
\begin{document}

\begin{center}
  \begin{tikzpicture}[yscale=-1]

   \foreach \a in {0, 5,...,45, 90, 95,...,135, 180, 185,...,225, 270, 275,...,315}
     \draw[Azure4] (\a:6.7) -- (\a:7);

     \draw[very thick] (7,0) arc (0:45:7cm);

     \draw[very thick] (0,7) arc (90:135:7cm);

     \draw[very thick] (-7,0) arc (180:225:7cm);

     \draw[very thick] (0,-7) arc (270:315:7cm);



   \foreach \a in {45, 50,...,90, 135, 140,...,180, 225, 230,...,270, 315, 320,...,359}
     \draw[Azure4] (\a:4.7) -- (\a:5);
     \draw[very thick] (0,5) arc (90:45:5cm);

     \draw[very thick] (-5,0) arc (180:135:5cm);

     \draw[very thick] (0,-5) arc (270:225:5cm);

     \draw[very thick] (5,0) arc (360:315:5cm);



%Main rays
\foreach \a in {0, 45,...,359}
    \draw[very thick] (\a:0) -- (\a:7); 

%Main rays
\foreach \a in {0, 90,...,359}
  \draw[very thick] (0, 0) -- (\a:7);

%Central point
\draw[fill=black] (0,0) circle(0.7mm);
\end{tikzpicture}
\end{center}

\end{document}

主要是因为起源,我知道它去哪里,但不知道如何在循环中实现它for。不过我可以做必要的数学运算(beginAngle:endAngle:5cm) ... :)

答案1

正如中心一样(0,0),这里有一个简单的解决方案:

\documentclass{standalone}
\usepackage{tikz}
\colorlet{tickcol}{cyan!50!blue}
\begin{document}
\begin{tikzpicture}[yscale=-1]
  \foreach \as/\ae/\radius/\fillcol in {
    0/45/7/orange,
    45/90/5/violet,
    90/135/7/cyan,
    135/180/5/blue,
    180/225/7/green,
    225/270/5/red,
    270/315/7/magenta,
    315/360/5/lime%
  }{
    % sector
    \draw[very thick,fill=\fillcol!50]
    (0,0) -- (\as:\radius) arc (\as:\ae:\radius) -- cycle;
    \pgfmathsetmacro\nextas{\as+5}
    % ticks
    \foreach \a in {\as,\nextas,...,\ae} {
      \draw[draw=tickcol] (\a:\radius) -- (\a:\radius-.3);
    }
  }
  % center
  \draw[fill=red] (0,0) circle(1mm);
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

\documentclass[tikz,border=5]{standalone}
\begin{document}
\tikz\foreach \i [evaluate={\r=mod(\i/45,2)*1+4;}] in {0,45,...,315}{
  \draw [very thick] (0:0) -- (\i:\r) arc (\i:\i+45:\r) -- cycle;
  \foreach \j in {1,...,8} \draw [thin] (\i+\j*5:\r) -- (\i+\j*5:\r-0.25);
};
\end{document}

在此处输入图片描述

答案3

这是我想出的代码。

如果有人有更好、更清晰的例子,请随意在下面发布,因为我愿意接受任何(相同或)更好的答案。(而不是我自己的)

我会暂时接受这个,因为它是我所寻找的一个工作示例。但由于我仍在学习,所以如果您能想到的一切,我将不胜感激。

\begin{center}
\begin{tikzpicture}[yscale=-1]

% center c1
\coordinate (c1) at (0,0);

%----  Large  -------%
\foreach \a in {0, 5,...,45, 90, 95,...,135, 180, 185,...,225, 270, 275,...,315}
  \draw[Azure4] (\a:6.7) -- (\a:7);

  \foreach \b in {0,90,...,359}
     \draw[very thick] ($(c1) + (\b:7cm)$) arc (\b:\b+45:7cm) ;


%----  Small  -------%     
\foreach \a in {45, 50,...,90, 135, 140,...,180, 225, 230,...,270, 315, 320,...,359}
  \draw[Azure4] (\a:4.7) -- (\a:5);

  \foreach \b in {0,90,...,359}
     \draw[very thick] ($(c1) + (\b:5cm)$) arc (\b:\b-45:5cm) ;


\end{tikzpicture}
\end{center}

得益于此邮政,以及 Paul Gaborit 的回答,我设法让它\for循环工作。

我认为,主要思想是固定原点,然后使其转动。我认为这($(c1) + (\b:5cm)$)是“旋转”原点的方法。

但我仍然不确定它究竟是如何工作的。

(其余部分只要你玩一下就很明显了)

注意:其余所有代码均相同(勾选和全部)

相关内容