如何绘制一个等距离的圆和一个连接等距的弦?例如,一个具有4个等距点的圆。
答案 0 :(得分:1)
你可以用TikZ做到这一点。我们可以定义一个命令\equic
,它将半径(可选,默认为1 cm
)和点数作为输入:
\newcommand{\equic}[2][1 cm]{
\draw (0,0) circle (#1);
\foreach \i in {1,...,#2} {
\coordinate (N\i) at (\i*360/#2:#1);
\fill[black] (N\i) circle (0.05 cm) node[anchor=west]{$\i$};
}
\draw (N#2) -- (N1);
\foreach \i in {2,...,#2} {
\pgfmathparse{\i-1}
\edef\j{\pgfmathresult}
\draw (N\i) -- (N\j);
}
}
现在,测试此命令的独立.tex
文件如下:
\documentclass{article}
\usepackage{tikz}
\newcommand{\equic}[2][1 cm]{
\draw (0,0) circle (#1);
\foreach \i in {1,...,#2} {
\coordinate (N\i) at (\i*360/#2:#1);
\fill[black] (N\i) circle (0.05 cm) node[anchor=west]{$\i$};
}
\draw (N#2) -- (N1);
\foreach \i in {2,...,#2} {
\pgfmathparse{\i-1}
\edef\j{\pgfmathresult}
\draw (N\i) -- (N\j);
}
}
\begin{document}
\begin{tikzpicture}
\equic[5 cm]{6}
\end{tikzpicture}
\end{document}
产生:
编辑(根据您的评论)
您可以通过在坐标定义上放置一个减号来顺时针编号:
\coordinate (N\i) at (-\i*360/#2:#1);
您可以将数字放在外面,方法是首先计算一个比圆圈大一点的半径(此处为\oc
,另外为0.25厘米) :
\pgfmathparse{#1/1 cm+0.25};
\edef\oc{\pgfmathresult cm};
该查询定义了一组坐标(N1)
,(N2)
... (Nn)
。您可以向TikZ图像添加说明,如:
\draw (N1) -- (N2) -- (N3) -- (N1);
从(N1)
到(N2)
,(N2)
到(N3)
等等绘制线条
如果您不想在所有等距点之间绘制线条,则可以删除第二个\draw
语句和\foreach
循环。
将所有文件放在一起将是:
\documentclass{article} \usepackage{tikz} \newcommand{\equic}[2][1 cm]{ \draw (0,0) circle (#1); \pgfmathparse{#1/1 cm+0.25}; \edef\oc{\pgfmathresult cm}; \foreach \i in {1,...,#2} { \coordinate (N\i) at (-\i*360/#2:#1); \fill[black] (N\i) circle (0.05 cm); \draw (-\i*360/#2:\oc) node{$\i$}; }\draw (N#2) -- (N1); \foreach \i in {2,...,#2} { \pgfmathparse{\i-1} \edef\j{\pgfmathresult} \draw (N\i) -- (N\j); }} \begin{document} \begin{tikzpicture} \equic[5 cm]{6} \draw (N1) -- (N2) -- (N3) -- (N1); \end{tikzpicture} \end{document}
新输出如下:
编辑2:
您可以使用以下代码定义中间等距点:
\newcommand{\equic}[2][1 cm]{ \draw (0,0) circle (#1); \pgfmathparse{#1/1 cm+0.25}; \edef\oc{\pgfmathresult cm}; \foreach \i in {1,...,#2} { \coordinate (N\i) at (-\i*360/#2:#1); \coordinate (NB\i) at (-\i*360/#2-180/#2:#1); \fill[black] (N\i) circle (0.05 cm); \fill[black] (NB\i) circle (0.05 cm); \draw (-\i*360/#2:\oc) node{$\i$}; \draw (-\i*360/#2-180/#2:\oc) node{$\bar{\i}$}; } }
现在,代码会生成两组点:原始(N1)
,(N2)
,...,(Nn)
和一组新的点:(NB1)
,{ {1}},...,(NB2)
((NBn)
代表条形码),它们是交错放置的。现在您可以自己再次提供绘图命令,例如:
\draw (N1) -- (N2) -- (N3) -- (N1); \draw (NB4) -- (NB5);
这会产生以下图像:
完整代码:
B