如何在 LaTeX 中绘制一个圆形及其周围的多边形,例如八边形?
答案1
我该怎么画你?让我数一数!
我可以用 TikZ 和 PSTricks 以及图片画你
...但我的扫描结果离开了我,我恢复了正常的操作程序。
已编辑:我原来的方法是使用节点形状,但 Debilski 在上面同时发布了该方法,所以这里是另一种 TikZ 方法。(不过,我会保留我的原始图片)。这种方法更像 TikZ 的“圆形”和“矩形”命令(虽然不完全一样),因为它看起来有点像通用多边形,但实际上它只是一个常规的 LaTeX 命令,可以扩展为正确的绘图指令。该命令的参数是边数和内半径。
\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{calc}
\newcommand{\polygon}[2]{%
let \n{len} = {2*#2*tan(360/(2*#1))} in
++(0,-#2) ++(\n{len}/2,0) \foreach \x in {1,...,#1} { -- ++(\x*360/#1:\n{len})}}
\begin{document}
\begin{tikzpicture}
\draw[red,dashed] (0,0) circle (1);
\draw (0,0) \polygon{8}{1};
\draw[red,dashed] (3,0) circle (1);
\draw (3,0) \polygon{4}{1};
\draw[red,dashed] (6,0) circle (1);
\draw (6,0) \polygon{7}{1};
\end{tikzpicture}
\end{document}
结果:
以下内容来自我最初的回答,如上所述,它与 Debilski 给出的回答相同,但由于该回答没有包含图片,因此我将它们保留在这里。
答案2
TikZ/PGF 中有一个例子手动的:
\documentclass{minimal}
\usepackage{tikz}
\usepgflibrary{shapes}
\begin{document}
\begin{tikzpicture}
\draw[dashed] (10,0) circle (1cm);
\node[regular polygon, regular polygon sides=8, draw, inner sep=0.707cm] at (10,0) {};
\end{tikzpicture}
\end{document}
答案3
重写答案——我错过了关于内切圆的要点
在 Metapost 中:
\documentclass{article}
\usepackage{luamplib}
\begin{document}
\begin{mplibcode}
beginfig(1)
pair vert[];
n:=5; radius=3cm;
for i=0 upto n:
vert[i] = radius * dir(360*i/n);
endfor;
draw for i=0 upto n-1: vert[i] -- endfor cycle withcolor red;
% polygon
draw for i=0 upto n-1: vert[i] .. endfor cycle withcolor green;
% outer circle
draw for i=0 upto n-1: 1/2*(vert[i]+vert[i+1]) .. endfor cycle withcolor blue;
% inner circle, using midpoints.
endfig;
\end{mplibcode}
\end{document}
它利用了 mplib,仅在 Luatex 中可用,因此您必须使用 进行编译lualatex
。它给出:
这种方法的好处在于,您可以使用线的中点来计算内部圆,而不是使用魔法数字或三角恒等式,从而给出更明显正确的代码。
答案4
您可能在这个网站的 tex 专用版本上更幸运:http://tex.stackexchange.com
尽管如此,您还是应该尝试使用 PSTricks 包并逐点或逐弧绘制您需要的任何形状。
例如,以下是绘制三角形和圆形的方法:
\begin{pspicture}(6,6)
%% Triangle in red
\psline[linecolor=red](1,1)(5,1)(1,4)(1,1)
%% Circle in blue with radius 1:
\pscircle[linecolor=blue](3,2.5){1}
\end{pspicture}
对于其他 n 边多边形,使用与上面三角形类似的形状,为形状中的每个顶点绘制一个点。