![Tikz:修改一些螺旋状的弧层以形成圆形的层](https://linux22.com/image/464710/Tikz%EF%BC%9A%E4%BF%AE%E6%94%B9%E4%B8%80%E4%BA%9B%E8%9E%BA%E6%97%8B%E7%8A%B6%E7%9A%84%E5%BC%A7%E5%B1%82%E4%BB%A5%E5%BD%A2%E6%88%90%E5%9C%86%E5%BD%A2%E7%9A%84%E5%B1%82.png)
我从编辑以下代码回答这个问题
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\tikzset{declare function={hourstoangle(\h) = 90-(\h)*360/12;}}
\def\dialR{3cm} % dial radius
% dial
%\draw (0,0) circle[radius=\dialR];
% hour tips
%\foreach \num in {1,...,12}{
%\draw ({hourstoangle(\num)}:\dialR)-- ++({hourstoangle(\num)}:-1mm);
%}
% hour labels
%\foreach \num in {1,...,12}{
%\draw ({hourstoangle(\num)}:\dialR-5mm) node{\num};
%}
% arcs
\foreach \num in {0,...,11}{%\foreach \num in {0,...,12}{ I only need 12 and not 13 arcs
\pgfmathsetmacro\dist{\dialR+2mm+2mm*\num}
\draw
% two tips
({hourstoangle(\num)}:\dist pt-1mm) -- ({hourstoangle(\num)}:\dist pt+1mm)
({hourstoangle(\num+3)}:\dist pt-1mm) -- ({hourstoangle(\num+3)}:\dist pt+1mm)
% one arc
({hourstoangle(\num)}:\dist pt)
arc[start angle={hourstoangle(\num)},end angle={hourstoangle(\num+3)},radius=\dist pt];
}
\end{tikzpicture}
\end{document}
我想要的是
我希望能够标记每个弧,就像我在下图中手动完成的那样。
我希望能够将外层的一些弧线移动到有空格的内层。例如,将
B_4
和移动B_7
到的同一层B_1
,而将B_5
和B_8
重新定位到“B_2”的同一层,并将B_6
重新定位到的同一层B_3
。这样整个图片将是一个由 3 层组成的圆圈,而不是螺旋。
答案1
编辑3
曲线上有标签的螺旋版本,您可以按照我之前给您的提示自己制作。无论如何,它在这里:
\begin{tikzpicture}
\tikzset{declare function={hourstoangle(\h) = 90-(\h)*360/12;}}
\def\dialR{3cm} % dial radius
% dial
%\draw (0,0) circle[radius=\dialR];
% hour tips
%\foreach \num in {1,...,12}{
%\draw ({hourstoangle(\num)}:\dialR)-- ++({hourstoangle(\num)}:-1mm);
%}
% hour labels
%\foreach \num in {1,...,12}{
%\draw ({hourstoangle(\num)}:\dialR-5mm) node{\num};
%}
% arcs
\foreach \num [count= \n from 1] in {0,...,11}{%\foreach \num in {0,...,12}{ I only need 12 and not 13 arcs
\pgfmathsetmacro\dist{\dialR+2mm+2mm*\num}
\draw
% two tips
({hourstoangle(\num)}:\dist pt-1mm) -- ({hourstoangle(\num)}:\dist pt+1mm)
({hourstoangle(\num+3)}:\dist pt-1mm) -- ({hourstoangle(\num+3)}:\dist pt+1mm)
% one arc
({hourstoangle(\num)}:\dist pt)
arc[start angle={hourstoangle(\num)},end angle={hourstoangle(\num+3)},radius=\dist pt] node[sloped,midway,fill=white,inner sep=1pt,allow upside down]{$B_{\n}$};
}
\end{tikzpicture}
\begin{tikzpicture}
\tikzset{declare function={hourstoangle(\h) = 90-(\h)*360/12;}}
\def\dialR{3cm} % dial radius
% dial
%\draw (0,0) circle[radius=\dialR];
% hour tips
%\foreach \num in {1,...,12}{
%\draw ({hourstoangle(\num)}:\dialR)-- ++({hourstoangle(\num)}:-1mm);
%}
% hour labels
%\foreach \num in {1,...,12}{
%\draw ({hourstoangle(\num)}:\dialR-5mm) node{\num};
%}
% arcs
\foreach \num [count= \n from 1] in {0,...,11}{%\foreach \num in {0,...,12}{ I only need 12 and not 13 arcs
\pgfmathsetmacro\dist{\dialR+2mm+2mm*\num}
\draw
% two tips
({hourstoangle(\num)}:\dist pt-1mm) -- ({hourstoangle(\num)}:\dist pt+1mm)
({hourstoangle(\num+3)}:\dist pt-1mm) -- ({hourstoangle(\num+3)}:\dist pt+1mm)
% one arc
({hourstoangle(\num)}:\dist pt)
arc[start angle={hourstoangle(\num)},end angle={hourstoangle(\num+3)},radius=\dist pt] node[sloped,midway,fill=white,inner sep=1pt,allow upside down]{$B_{\n}$};
}
\end{tikzpicture}
编辑
allow upside down
如果您希望每个节点都位于圆圈的外部空间,则可以使用以下版本。
\documentclass[tikz,border=3.14mm]{standalone}
\begin{document}
\begin{tikzpicture}
\tikzset{declare function={hourstoangle(\h) = 90-(\h)*360/12;}}
\def\dialR{3cm} % dial radius
% dial
%\draw (0,0) circle[radius=\dialR];
% hour tips
%\foreach \num in {1,...,12}{
%\draw ({hourstoangle(\num)}:\dialR)-- ++({hourstoangle(\num)}:-1mm);
%}
% hour labels
%\foreach \num in {1,...,12}{
%\draw ({hourstoangle(\num)}:\dialR-5mm) node{\num};
%}
% arcs
\foreach \num [count= \n from 1] in {0,...,11}{%\foreach \num in {0,...,12}{ I only need 12 and not 13 arcs
\pgfmathsetmacro\dist{\dialR+2mm+2mm*\num}
\draw
% two tips
({hourstoangle(\num)}:\dist pt-1mm) -- ({hourstoangle(\num)}:\dist pt+1mm)
({hourstoangle(\num+3)}:\dist pt-1mm) -- ({hourstoangle(\num+3)}:\dist pt+1mm)
% one arc
({hourstoangle(\num)}:\dist pt)
arc[start angle={hourstoangle(\num)},end angle={hourstoangle(\num+3)},radius=\dist pt] node[sloped,midway,above]{$B_{\n}$};
}
\end{tikzpicture}
\begin{tikzpicture}
\tikzset{declare function={hourstoangle(\h) = 90-(\h)*360/12;}}
\def\dialR{3cm} % dial radius
\newcommand{\drawcircle}[1]{
\pgfmathsetmacro\dist{\dialR+#1 mm}
\draw
% two tips
({hourstoangle(\num)}:\dist pt-1mm) -- ({hourstoangle(\num)}:\dist pt+1mm)
({hourstoangle(\num+3)}:\dist pt-1mm) -- ({hourstoangle(\num+3)}:\dist pt+1mm)
% one arc
({hourstoangle(\num)}:\dist pt)
arc[start angle={hourstoangle(\num)},end angle={hourstoangle(\num+3)},radius=\dist pt] node[sloped,midway,above,allow upside down]{$B_{\n}$};}
% arcs
\foreach \num [evaluate = \num as \n using int(\num+1)] in {0,3,6,9}{%
\drawcircle{0}
}
\foreach \num [evaluate = \num as \n using int(\num+1)] in {1,4,7,10}{%
\drawcircle{6}
}
\foreach \num [evaluate = \num as \n using int(\num+1)] in {2,5,8,11}{%
\drawcircle{12}
}
\end{tikzpicture}
\end{document}
编辑2
通过稍微改变节点参数,你就可以得到你想要的:
node[sloped,midway,fill=white,inner sep=1pt,allow upside down]
代替node[sloped,midway,above,allow upside down]
顺便说一句,既然你已经在这个网站上待了一段时间了,你可能会从你得到的许多答案中受益,从而了解一点关于 Ti钾Z. 也许你应该尝试一下 ;)