我想连续画五个半圆(类似于第二张照片)。这是以点为顶点/节点的图形。我可以画一个以原点为中心的半圆(请参见第一张照片),这正是我想要的样子,但我无法在中心 (-6;0)、(-12;0)、(6;0) 和 (12;0) 复制它。我该如何绘制其他四个?
我附上了我的 LateX 代码。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,decorations.pathmorphing,backgrounds,positioning,fit,petri,calc,graphs,graphs.standard}
\begin{document}
\begin{figure}[h]
\begin{center}
\begin{tikzpicture}
[scale=0.6,inner sep=0.5mm, % this is the node radius
vertex/.style={circle,draw}, % this defines the default style for the vertex class
thickedge/.style={line width=2pt}] % this defines the default style for the thick edges
\def\r{3}
\foreach \point in {(0:\r) ,(90:\r),(180:\r),(60:\r),(30:\r),(150:\r),(120:\r)}
\draw[fill=white] \point circle(.12);
\node at (60:\r) {} ;
\node at (30:\r) {} ;
\node at (150:\r) {} ;
\node at (120:\r) {} ;
\node[vertex] (1) at (0,0) [fill=white] {};
\node[vertex] (2) at (0,3) [fill=white] {};
\node[vertex] (3) at (-3,0) [fill=white] {};
\node[vertex] (5) at (3,0) [fill=white] {};
\draw (1)--(2);
\draw (3)--(1)--(5);
\draw (0,0)+(122:3cm) arc[start angle=122, end angle=148, radius=3cm];
\draw (0,0)+(32:3cm) arc[start angle=32, end angle=58, radius=3cm];
\draw (0,0)+(28:3cm) arc[start angle=28, end angle=2, radius=3cm];
\draw (0,0)+(-182:3cm) arc[start angle=-182, end angle=-208, radius=3cm];
\draw (0,0)+(-242:3cm) arc[start angle=-242, end angle=-268, radius=3cm];
\draw (0,0)+(-272:3cm) arc[start angle=-272, end angle=-298, radius=3cm];
\end{tikzpicture}
\end{center}
\end{figure}
\end{document}
答案1
欢迎来到 TeX.SE
我认为您正在寻找类似这样的东西,使用几个\foreach
循环来重复半圆和点:
\documentclass[tikz,border=1.618]{standalone}
\begin{document}
\begin{tikzpicture}
\foreach\i in {0,2,...,8}
{
\draw (\i,0) arc (180:0:1) -- cycle;
\foreach\j in {0,30,60,...,180}
\fill (\i+1,0) ++ (\j:1) circle (1pt);
\draw (\i+1,0) --++ (0,1);
\fill (\i+1,0) circle (1pt);
}
\end{tikzpicture}
\end{document}
更新(白色节点):在这种情况下,我们需要在节点前画线:
\documentclass[tikz,border=1.618]{standalone}
\begin{document}
\begin{tikzpicture}
\foreach\i in {0,2,...,8}
{
\draw (\i,0) arc (180:0:1) -- cycle;
\draw (\i+1,0) --++ (0,1); % <-- before the nodes
\foreach\j in {0,30,60,...,180}
\draw[black,fill=white] (\i+1,0) ++ (\j:1) circle (1pt);
\draw[black,fill=white] (\i+1,0) circle (1pt);
}
\end{tikzpicture}
\end{document}
答案2
只是为了好玩,让我们用 来做pic
。有关 的更多详细信息pic
请点击此处。简而言之,它是一个 tikz 代码片段,您可以非常轻松地预定义和重用它。正如 Juan Castaño 所说:“也就是说,\pic
可以使半圆更加可定制:大小、旋转、颜色”。您可以事半功倍。以下是代码:
\documentclass[border=1.618]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[
semicircles/.pic={
\draw (0,0) arc (180:0:#1) -- cycle;
\foreach\j in {0,30,60,...,180}
\fill (#1,0) ++ (\j:#1) circle (1pt);
\draw (#1,0) --++ (0,#1);
\fill (#1,0) circle (1pt);
}
]
\foreach \j in {0,2,...,8}{
\pic at (\j,0){semicircles=1};
\pic [rotate=45,yshift=5cm] at (\j,0){semicircles=2};
}
\end{tikzpicture}
\end{document}
结果如下。
编辑:根据 Juan Castaño 的建议,我们可以添加一个pic actions
只能在 中部署的样式选项pic
。
它的实用性源于它能够添加任意样式并让我们传递<key>=<value>
参数来改变某些内容的样式pic
。
从上一个代码开始,我们只需要改变
\fill (#1,0) circle (1pt);
进入
\fill [pic actions] (#1,0) circle (1pt);
这意味着现在任何对此的调用都pic
可以像这样改变圆圈的样式:
``
\begin{tikzpicture}[
semicircles/.pic={
\draw (0,0) arc (180:0:#1) -- cycle;
\foreach\j in {0,30,60,...,180}
\fill (#1,0) ++ (\j:#1) circle (1pt);
\draw (#1,0) --++ (0,#1);
\fill [pic actions] (#1,0) circle (1pt);
}
]
\foreach \j in {0,2,...,8}{
\pic at (\j,0){semicircles=1};
\pic [rotate=45,yshift=5cm] at (\j,0){semicircles=2};
\pic [fill=red] at (\j,-2){semicircles=1};
}
\end{tikzpicture}