答案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}