座標セットから境界「ブロブ」を自動的に生成する

座標セットから境界「ブロブ」を自動的に生成する

座標のセットが与えられたら、このセットの境界となる「ブロブ」を生成したいと思います。

私が得た中で最も近いものはこれです(驚くほどシンプルです):

\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}

これによって次のものが生成されます:

ここに画像の説明を入力してください

これには 2 つの問題があります。

  • プロットはノードの周りを回るのではなく、ノードを通過します。 のような修飾子を使用して.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で実装された凸包アルゴリズムを見たことがありませんでした。順序付けされていない座標?

関連情報