使用 LaTeX 绘制多边形

使用 LaTeX 绘制多边形

下午好,我想知道我的教授是如何在下面两张照片中绘制这六个多边形的。 4 个多边形 2 十边形

我声明我使用-package\usepackage{stix}并且我愿意学习tikz它。

非常感谢

答案1

在此处输入图片描述

tikz这是一种简单的方法,通过一些循环并手动连接节点来完成。

\documentclass[tikz, border=20]{standalone}
\begin{document}
    \begin{tikzpicture}
        % 2 nodes
        \draw (0, 0) circle [radius=2];
        \foreach \i in {0, 1} {
            \coordinate (node\i) at (360/2*\i+90:2);
            \draw (node\i) circle [radius=0.1];
        }
        \draw (node0) -- (node1);
        
        \begin{scope}[xshift=5cm]
            % 3 nodes
            \draw (0, 0) circle [radius=2];
            \foreach \i in {0, 1, 2} {
                \coordinate (node\i) at (360/3*\i+90:2);
                \draw (node\i) circle [radius=0.1];
            }
            \draw (node0) -- (node1);
            \draw (node1) -- (node2);
            \draw (node2) -- (node0);
        \end{scope}
        
        \begin{scope}[xshift=10cm]
            % 4 nodes
            \draw (0, 0) circle [radius=2];
            \foreach \i in {0, 1, 2, 3} {
                \coordinate (node\i) at (360/4*\i+90:2);
                \draw (node\i) circle [radius=0.1];
            }
            \draw (node0) -- (node1);
            \draw (node1) -- (node2);
            \draw (node2) -- (node3);
            \draw (node3) -- (node0);
            \draw (node0) -- (node2);
            \draw (node1) -- (node3);
        \end{scope}
        
        \begin{scope}[yshift=-5cm]
            % 5 nodes
            \draw (0, 0) circle [radius=2];
            \foreach \i in {0, 1, 2, 3, 4} {
                \coordinate (node\i) at (360/5*\i+90:2);
                \draw (node\i) circle [radius=0.1];
            }
            \draw (node0) -- (node1);
            \draw (node1) -- (node2);
            \draw (node2) -- (node3);
            \draw (node3) -- (node4);
            \draw (node4) -- (node0);
            \draw (node0) -- (node2);
            \draw (node0) -- (node3);
            \draw (node1) -- (node3);
            \draw (node1) -- (node4);
            \draw (node2) -- (node4);
        \end{scope}
        
        \begin{scope}[xshift=5cm, yshift=-5cm]
            % 6 nodes
            \draw (0, 0) circle [radius=2];
            \foreach \i in {0, 1, 2, 3, 4, 5} {
                \coordinate (node\i) at (360/6*\i+90:2);
                \draw (node\i) circle [radius=0.1];
                % \node at (node\i) {\Huge\color{red}\i};
            }
            \draw (node0) -- (node1);
            \draw (node1) -- (node2);
            \draw (node2) -- (node3);
            \draw (node3) -- (node4);
            \draw (node4) -- (node5);
            \draw (node5) -- (node0);
            \draw (node0) -- (node2);
            \draw (node0) -- (node3);
            \draw (node0) -- (node4);
            \draw (node1) -- (node3);
            \draw (node1) -- (node4);
            \draw (node1) -- (node5);
            \draw (node2) -- (node4);
            \draw (node2) -- (node5);
            \draw (node3) -- (node5);
        \end{scope}
        
        \begin{scope}[xshift=10cm, yshift=-5cm]
            % 6 nodes (again)
            \draw (0, 0) circle [radius=2];
            \foreach \i in {0, 1, 2, 3, 4, 5} {
                \coordinate (node\i) at (360/6*\i+90+rand*20:2);
            }
            \draw (node0) -- (node1);
            \draw (node1) -- (node2);
            \draw (node2) -- (node3);
            \draw (node3) -- (node4);
            \draw (node4) -- (node5);
            \draw (node5) -- (node0);
            \draw (node0) -- (node2);
            \draw (node0) -- (node3);
            \draw (node0) -- (node4);
            \draw (node1) -- (node3);
            \draw (node1) -- (node4);
            \draw (node1) -- (node5);
            \draw (node2) -- (node4);
            \draw (node2) -- (node5);
            \draw (node3) -- (node5);
        \end{scope}
    \end{tikzpicture}
\end{document}

解释

这里使用的关键元素是

\foreach \i in {0, 1, 2} {
    <do something with \i>
}

这是 中的简单循环tikz。代码<do something with \i>执行三次,依次\i取值012。本例中使用的代码是

\coordinate (node\i) at (360/2*\i+90:2);
\draw (node\i) circle [radius=0.1];

它将坐标标记放置在某个位置并为其命名node\i(用当前值\i替换)。位置以极坐标表示(使用度数),极坐标的一般语法tikz是,(a:r)其中r是半径,a是角度(在水平轴上方测量,因此常数偏移量是+ 90从圆的顶部测量的)。这里的第二行在坐标位置绘制一个小圆圈。

循环结束后,只需连接所有想要连接的节点。

最终的不规则绘图是通过在每个角度上添加随机偏移来完成的,然后可以使用rand该偏移按 20 倍缩放来获得明显的效果。

每幅画(第一幅除外)都放置在一个scope环境中,并且此范围的每个元素都应用了xshiftand/or yshift。这会将原点移动指定的量(您必须在此处输入单位,否则默认为 pt)

提示

tikz循环可以解析类似

\foreach \i in {0, ..., 5} {}

它将执行 6 次,分别\i取值 0、1、2、3、4 和 5。或者你可以使用

\foreach \i in {0, 0.5, ..., 2} {}

它将执行 5 次,分别\i取值 0、0.5、1、1.5 和 2。

不要害怕画出最终图片中不会出现的东西,例如连接我所拥有的节点时

\node at (node\i) {\Huge \i};

在循环内对每个节点进行编号,这样我就可以轻松看到我需要连接什么。

最后,最好的学习方法tikz就是继续使用它,并在需要时查找内容。玩得开心

答案2

我认为您可以通过在网站上搜索找到多个答案,但这里有一种绘制您需要的完整图形的方法(设计为正多边形)。

\documentclass[tikz,border=3.14mm]{standalone}
          
\begin{document}
    \begin{tikzpicture}
        \def\R{3} \def\N{5}
        \draw (0,0) circle(\R);
        \foreach \i in {1,...,\N} 
            {
            \coordinate (P-\i) at (\i*360/\N:\R);
            \draw (P-\i) circle(5pt);
            }
        \pgfmathtruncatemacro\n{\N-1}
        \foreach \i in {1,...,\n}
            {
            \pgfmathtruncatemacro\j{\i+1}
            \foreach \k in {\j,...,\N} \draw (P-\i) -- (P-\k);
            }
            
    \end{tikzpicture}       
\end{document}

N=5 的结果:
K5

N=8 的结果:
K8

N=19 的结果:
K19

相关内容