问题

问题

问题

我想知道如何向 TikZ 的默认形状(特别是多边形的一侧)添加任意数量的坐标。

样本

这类似于https://tex.stackexchange.com/a/47856/13552

TikZ 多边形形状

答案1

如果您要寻找可以使用的周长周围的任意坐标(name.number),其中name是形状名称,number是从测量的度数表示的角度name.east

\documentclass[border=2mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric,plotmarks}
\begin{document}
\begin{tikzpicture}
\node[name=s, shape=regular polygon, inner sep=1cm,draw,color=black!30,thick] {};
\draw[shift=(s.east),blue!70] plot[mark=o] coordinates{(0,0)} {};
  \foreach \anchor in
    {0,10,20,...,350}
\draw[shift=(s.\anchor),red] plot[mark=x] coordinates{(0,0)} {};
\end{tikzpicture}
\end{document}

在此处输入图片描述

编辑

当使用 时shape=regular polygon,TikZ 会从形状的顶部开始命名所有边和角(有关详细信息,请参阅 TikZ 3.0.0 手册第 67.3 节“几何形状”。)为了指定沿任意边的任意点,您可以定义一个命令,将一个点放置在正多边形的两个连续角(即沿边)之间一定距离处。这需要\usetikzlibrary{calc}

在下面的例子中,我定义了命令mysidemark,其语法如下:\mysidemark{<start corner>}{<end corner>}{<fraction of distance along path (between 0 and 1)>}

\documentclass[border=2mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,shapes.geometric}
\begin{document}
\newcommand{\mysidemark}[3]{%
\draw[red,shift=($(s.corner #1)!#3!(s.corner #2)$)] plot[mark=*] coordinates{(0,0)} {};
}
\begin{tikzpicture}
\node[name=s, shape=regular polygon, regular polygon sides=6, inner sep=1cm,draw,color=black!30,thick] {};
\mysidemark{1}{2}{0}
\mysidemark{1}{2}{0.17}
\mysidemark{1}{2}{0.46}
\mysidemark{2}{3}{0.66}
\mysidemark{2}{3}{0.90}

\begin{scope}[xshift=4cm]
\node[name=s, shape=regular polygon, regular polygon sides=7, inner sep=1cm,draw,color=black!30,thick] {};
\mysidemark{2}{3}{0.07}
\mysidemark{3}{4}{0.25}
\mysidemark{6}{7}{0.77}
\end{scope}
\end{tikzpicture}
\end{document}

在此处输入图片描述

笔记

可以明确使用此命令,如下所示,但需要做更多工作才能将其用于\foreach命令中。例如,参见\foreach 与 \newcommand 如何一起使用?

答案2

定义新的锚点非常棘手,如果不查看用于定义形状的 PGF 代码,基本上是不可能的。但是混叠锚点非常简单(一旦你有命令就可以这样做):

\documentclass[tikz,border=5]{standalone}
\usetikzlibrary{shapes.geometric}
\makeatletter
\def\pgfaliasanchor#1#2#3{%
  \expandafter\gdef\csname pgf@anchor@#1@#2\endcsname{%
    \pgf@sh@reanchor{\csname pgf@sh@ns@\pgfreferencednodename\endcsname}{#3}%
  }%
}%
\makeatother

\pgfaliasanchor{regular polygon}{peter}{90}
\pgfaliasanchor{regular polygon}{paul}{330}
\pgfaliasanchor{regular polygon}{mary}{south west}
\begin{document}
\begin{tikzpicture}
\node [fill=gray!50, regular polygon, minimum size=1.5in] (shape) at (2,2) {};
\foreach \anchor in {peter, paul, mary}
  \draw [draw=red] (shape.\anchor) 
    circle [radius=1/20] node [above] {\tt\anchor};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容