给定一组坐标,我想生成该集合的边界“斑点”。
我最接近的答案是这个(出奇的简单):
\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\node (p1) at (0, 0) {A};
\node (p2) at (1, 1) {B};
\node (p3) at (2, 0.5) {C};
\draw plot [smooth cycle,tension=1] coordinates {(p1) (p2) (p3)};
\end{tikzpicture}
\end{document}
其结果为:
这有两个问题:
- 剧情贯穿节点,而不是绕过节点。我可以使用修饰符来
.north
在一定程度上解决这个问题,但这非常繁琐。 - 我必须按照正确的顺序指定边界坐标才能产生正确的结果。
如何使用 TikZ 从一组无序坐标中计算边界斑点?
答案1
如果您愿意指定顺序,有一个非常简单的方法可以实现它。
\documentclass{standalone}
\usepackage{pgfplots}
\pgfdeclarelayer{background}
\pgfsetlayers{background,main}
\tikzset{
expand bubble/.style={
preaction={draw,line width=10.4pt},
white,fill,draw,line width=10pt,
},
}
\begin{document}
\begin{tikzpicture}
\node (p1) at (0, 0) {A};
\node (p2) at (1, 1) {B};
\node (p3) at (2, 0.5) {C};
\begin{pgfonlayer}{background}
\path[expand bubble]plot [smooth cycle,tension=1] coordinates {(p1) (p2) (p3)};
\end{pgfonlayer}
\end{tikzpicture}
\end{document}
PS. 使用同样的技巧这里
PS2. 我个人没有见过在 TeX 中实现的凸包算法。你能解释一下你所说的无序坐标?