再次感谢大家的大力帮助。我在寻找标记下面 16 边形上所有点的方法时遇到了一些麻烦。有人能帮我一下如何在不计算每个点的情况下做到这一点吗?
我看到帖子了,在 tikz 中标记圆圈内的点,但我对代码中的所有内容理解不够透彻,不知道如何在我的插图中添加额外的点。再次感谢。
\documentclass[11pt]{article}
\usepackage[margin=1in]{geometry}
\usepackage{amsfonts, amsmath, amssymb,}
\usepackage[none]{hyphenat}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{pst-eucl}
\usepackage[nottoc, notlot, notlof]{tocbibind}
\usetikzlibrary{shapes.geometric}
\begin{document}
\begin{center}
\begin{tikzpicture}
\draw[thick](3,3) circle(4.25);
\node[ultra thick, red, draw,minimum size={2*4.25cm},regular polygon,regular polygon
sides=16,rotate=11.25] at
(3,3) (16-gon) {};
\fill [red] (3,3) +(90:4.25) circle (4pt);
\fill [red] (3,3) +(67.5:4.25) circle (4pt);
\fill [red] (3,3) +(112.5:4.25) circle (4pt);
\fill [red] (3,3) +(135:4.25) circle (4pt);
\fill [red] (3,3) +(157.5:4.25) circle (4pt);
\fill [red] (3,3) +(180:4.25) circle (4pt);
\fill [red] (3,3) +(202.5:4.25) circle (4pt);
\fill [red] (3,3) +(225:4.25) circle (4pt);
\fill [red] (3,3) +(247.5:4.25) circle (4pt);
\fill [red] (3,3) +(269.5:4.25) circle (4pt);
\fill [red] (3,3) +(292.5:4.25) circle (4pt);
\fill [red] (3,3) +(315:4.25) circle (4pt);
\fill [red] (3,3) +(337.5:4.25) circle (4pt);
\fill [red] (3,3) +(360:4.25) circle (4pt);
\fill [red] (3,3) +(382.5:4.25) circle (4pt);
\fill [red] (3,3) +(405:4.25) circle (4pt);
\node[thick, red] (n1) at (-.5,-.5) {\begin{huge}$A$\end{huge}};
\node[thick, red] (n1) at (-.5,6.5) {\begin{huge}$E$\end{huge}};
\node[thick, red] (n1) at (6.5,6.5) {\begin{huge}$I$\end{huge}};
\node[thick, red] (n1) at (6.5,-.5) {\begin{huge}$M$\end{huge}};
\node[thick, red] (n1) at (-1.9497,3) {\begin{huge}$C$\end{huge}};
\node[thick,red] (n1) at (3,7.9497) {\begin{huge}$G$\end{huge}};
\node[thick, red] (n1) at (7.9497,3) {\begin{huge}$K$\end{huge}};
\node[thick, red] (n1) at (3,-1.9497) {\begin{huge}$O$\end{huge}};
\end{tikzpicture}
\end{center}
\end{document}
答案1
好的,这里有一个简化事情的建议。除了从序言中删除不需要的内容之外,我相信这已经简化了代码。您只需将标签传递给列表(目前是){A,E,I,M,C,G,K,O,G,E,C,A,O,M,K,I}
,其余的将由 Ti 完成钾Z。
\documentclass[11pt]{article}
\usepackage[margin=1in]{geometry}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\begin{document}
\begin{center}
\begin{tikzpicture}
\draw[thick](3,3) circle(4.25);
\node[ultra thick,draw,minimum size={2*4.25cm},regular polygon,regular polygon
sides=16,rotate=11.75,red] at
(3,3) (16-gon) {};
\foreach \X [count=\Y] in {A,E,I,M,C,G,K,O,G,E,C,A,O,M,K,I}
{\fill[red] (16-gon.corner \Y) circle (4pt)
node[anchor=270-22.5+\Y*22.5,font=\huge,inner sep=4pt,text depth=2pt]
{$\X$};}
\end{tikzpicture}
\end{center}
\end{document}
答案2
你引用的页面中的圆形和正多边形有很大区别在 tikz 中标记圆圈内的点以及您编码的那个。
确实,您已经使用操作追踪了正多边形,node
而另一个解决方案则使用draw
操作构建了它们。
为了做出区分,您必须了解什么path
是。
TikZ 中的路径是什么?
我引用手册 3.0.1a 第 119 页的内容:
路径是一系列直线或曲线,无需连接。TikZ 可以轻松指定路径,部分使用 METAPOST 的语法。
我引用手册 3.0.1a 第 119 页的内容:
默认情况下,\小路命令对路径“不做任何事”,只是“丢弃”它。因此,如果您写入 \path(0,0)--(1,1);,则图片中不会绘制任何内容。唯一的效果是图片所占的区域(可能)被放大,以便路径适合该区域。要真正对路径“做”某事,可以使用类似 画或者充满必须在路径的某个位置给出。命令如下\画隐式地执行此操作。
我引用手册 3.0.1a 第 965 页的内容:
在 pgf 中,最重要的实体是小路.所有图形都由许多路径组成,可以描边(绘制),填充,阴影, 或者 剪裁反对。[…] 路径首先被构建,然后被使用。[…]
首先通过操作构建一条路径\path
,然后通过操作来追踪它draw
。
TikZ 中的节点是什么?
我引用手册 3.0.1a 第 214 页的内容:
使用特殊路径操作将节点添加到路径节点。节点不是路径本身的一部分。相反,它们被添加到图片中就在之前或者后路径已经画。
该node
操作最初用于在图形上某个点旁边写文字。例如,为其命名。此文字可以框架和不同的,shapes
例如rectangle
,ellipse
circle
以及shapes.geometry
你使用的 库regular polygon
。所以node
就像是绘画的一种点缀。
我引用手册 3.0.1a 第 214 页的内容:
在最简单的情况下,一个节点只是一些文字放置在某个坐标上。然而,节点也可以有一个边界在其周围绘制文本或具有更复杂的背景和前景。事实上,有些节点根本没有文本,而仅由背景组成。
由于该操作的主要目的node
是将文本放置在某个点的旁边,因此nodes
在图形放大或缩小时不会修改文本(这是可能的,但并非如此)。
默认情况下,转换不适用于节点:
我引用手册 3.0.1a 第 234 页的内容:
有可能变换节点,但默认情况下,转换不适用于节点原因是,即使主图形变换了,您通常也不希望文本被缩放或旋转。缩放文本是有害的,而旋转则不那么有害。
请记住,节点不是路径的一部分并且对放大和缩小等路径变换不敏感。
例如,在下面的代码中,我将圆圈涂成了蓝色。通过缩小图形,只有用操作绘制的圆圈draw
缩小了。文本和正多边形并没有减少,因为它们已经参与了这次node
行动。
\documentclass[tikz, border=5mm]{standalone}
\usetikzlibrary{shapes.geometric}
\begin{document}
\begin{tikzpicture}
\draw[thick,fill=blue!20](3,3) circle(4.25);
\node[ultra thick, red, draw,minimum size={2*4.25cm},regular polygon,regular polygon
sides=16] at
(3,3) (16-gon)[text=blue] {I am a hexakaidecagon};
\foreach \p [count=\n] in {H,E,X,A,K,A,I,D,E,C,A,G,O,N,E,-}{
\node [label=22.5*(3+\n):\p] at (16-gon.corner \n){};}
\begin{scope}[shift={(12,2)},scale=.3]
\draw[thick,fill=blue!20](3,3) circle(4.25);
\node[ultra thick, red, draw,minimum size={2*4.25cm},regular polygon,regular polygon
sides=16] at
(3,3) (16-gon)[text=blue] {I am a hexakaidecagon};
\foreach \p [count=\n] in {H,E,X,A,K,A,I,D,E,C,A,G,O,N,E,-}{
\node [label=22.5*(3+\n):\p] at (16-gon.corner \n){};}
\end{scope}
\end{tikzpicture}
\end{document}
简化的代码以便于解释:
\draw[thick](3,3) circle(4.25);
\node[draw,regular polygon,regular polygon sides=16] at (3,3) (16-gon) {};
您已将一个节点放置在点 (3,3) 处,并用正多边形框住它。您现在已将此节点 (16 边形) 称为point
当前路径中的 ,但它不是一个点:它仍然是node
!
好像一切都还不够复杂(事情变得更加复杂)TikZ 允许您命名node
并像 一样使用它point
,current path
但事实并非如此!
将节点命名为一个点:
我引用手册 3.0.1a 第 214 页的内容:
该
node
操作通常后面跟着一些仅适用于该节点的选项。然后,您可以选择姓名通过在括号中提供名称来指定节点。最后,对于节点操作必须用花括号为节点提供一些标签文本,而对于协调 操作可能无法执行。节点要么放置在路径的当前位置路径绘制完成后或(较少见,仅当您添加路径后面选项)在绘制路径之前。
这必然会导致混乱:你混淆了nodes
不是道路一部分的女巫和points
是道路一部分的女巫path
。
(16-gon)
将此节点放大,使其与圆圈完美契合,然后为其命名。
就像(16-gon)
a 一样node
,它的顶点是anchors
(参见手册第 227 页)。它们的正常用途是允许此形状锚定在point
的 上path
。
TikZ 中的锚点是什么?
我引用手册 3.0.1a 第 42 页的内容:
为此,您放入图片中的每个节点对象都配备了几个锚点。例如,北锚位于形状上端的中间,南锚点位于底部,东北锚点位于右上角。当您给出选项时锚点=北,文本将被放置,使得北锚点位于当前位置,并且文本位于当前位置的下方。
手册第 700 页表明名为 s 的多边形的顶点name=s
被命名(s.corner 1)
(s.corner 2)
为 etc。当您命名此多边形(16-gon)
时,它的顶点也被命名为(16-gon 1)
(16-gon 2)
etc。
以下是从手册第 700 页复制的重命名多边形的示例(5-gon)
将文本(so nodes
)放置在另一个文本的顶点上node
(多边形),TikZ
允许您使用 来执行此操作labels
。
TikZ 中的标签是什么?
我引用手册 3.0.1a 第 239 页的内容:
/tikz/label=[< options >]< angle >: < text> (no default)
当这个选项被赋予节点操作时,会导致其他当前节点完成后要添加到路径的节点。此额外节点将包含文本 。
我将每个标签与迭代一起添加到标签列表中,{H,E,X,A,K,A,I,D,E,C,A,G,O,N,E,--}
方法是将它们附加到多边形的每个顶点。更不用说在每个顶点上放置一个小的红色圆盘了:fill=red,circle,inner sep=2pt,
\foreach \p [count=\n] in {H,E,X,A,K,A,I,D,E,C,A,G,O,N,E,--}{
\node [fill=red,circle,inner sep=2pt,label=22.5*(3+\n):\p] at (16-gon.corner \n){};}
以下是结果和最终代码:
\documentclass[tikz, border=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\begin{document}
\begin{tikzpicture}
\draw[thick](3,3) circle(4.25);
\node[ultra thick, red, draw,minimum size={2*4.25cm},regular polygon,regular polygon
sides=16,rotate=11.25] at
(3,3) (16-gon)[text=blue] {I am a hexakaidecagon};
\foreach \p [count=\n] in {H,E,X,A,K,A,I,D,E,C,A,G,O,N,E,--}{
\node [fill=red,circle,inner sep=2pt,label=22.5*(3+\n):\p] at (16-gon.corner \n){};}
\end{tikzpicture}
\end{document}
使用 www.DeepL.com/Translator 翻译
答案3
PSTricks 解决方案仅用于比较目的。
\documentclass[pstricks]{standalone}
\usepackage{pst-plot}
\begin{document}
\begin{pspicture}(-3,-3)(3,3)
\curvepnodes[plotpoints=13]{0}{360}{2 t PtoC}{A}
\psnpolygon[showpoints](0,\numexpr\Anodecount-1){A}
\pscircle{2}
\multido{\i=0+1}{\Anodecount}{\uput{2mm}[!dt \i\space mul]{!dt \i\space mul 90 sub}(A\i){$A_{\i}$}}
\end{pspicture}
\end{document}
编辑1
这些简单的标签足以证明 PSTricks 是有效的。
\documentclass[pstricks]{standalone}
\usepackage{pst-plot}
\begin{document}
\begin{pspicture}(-3,-3)(3,3)
\curvepnodes[plotpoints=8]{0}{360}{2 t PtoC}{A}
\psnpolygon[showpoints](0,\numexpr\Anodecount-1){A}
\pscircle{2}
\foreach \j [count=\i from 0] in {A,B,C,D,E,F,G}{\uput{2mm}[!dt \i\space mul](A\i){\j}}
\end{pspicture}
\end{document}
编辑 2(其他)
特征:
PtoCrel
DegtoAny
\char\numexpr\i+65
\documentclass[pstricks]{standalone}
\usepackage{pst-plot}
\begin{document}
\def\N{7 }
\begin{pspicture}(-3,-3)(3,3)
\degrees[\N]
\curvepnodes[plotpoints=\numexpr\N+1]{0}{\N}{2 t PtoCrel}{A}
\psnpolygon[showpoints](0,\numexpr\Anodecount-1){A}
\pscircle{2}
\foreach \i in {0,...,\numexpr\N-1}{\uput{2mm}[\i]{!\i\space 90 DegtoAny sub}(A\i){\char\numexpr\i+65}}
\end{pspicture}
\end{document}
答案4
\documentclass[pstricks,border=5mm]{standalone}
\usepackage{pstricks}
\begin{document}
\begin{pspicture}(-2.5,-2.5)(2.5,2.5)
\degrees[16] \pscircle(0,0){2}
\foreach \X [count=\Y] in {G,E,C,A,O,M,K,I,A,E,I,M,C,G,K,O}
{\psline[linecolor=red]{*-*}(2;\Y)(2;\the\numexpr\Y+1)
\uput[\Y](2;\Y){\textcolor{red}{\X}}}
\end{pspicture}
\end{document}