Gerando automaticamente um "blob" delimitador a partir de um conjunto de coordenadas

Gerando automaticamente um "blob" delimitador a partir de um conjunto de coordenadas

Dado um conjunto de coordenadas, quero gerar uma "bolha" delimitadora desse conjunto.

O mais próximo que cheguei foi este (surpreendentemente simples):

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

O que produz:

insira a descrição da imagem aqui

Isso tem dois problemas:

  • O enredo passa pelos nós em vez de contorná-los. Eu poderia usar modificadores para .northcorrigir isso até certo ponto, mas isso é muito tedioso.
  • Tenho que especificar as coordenadas do limite em uma ordem adequada para produzir o resultado correto.

Como eu poderia usar o TikZ para calcular um blob delimitador a partir de um conjunto de coordenadas não ordenadas?

Responder1

Existe uma maneira extremamente fácil de conseguir isso, se você estiver disposto a especificar o pedido.

\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. o mesmo truque é usadoaqui

PS2. Eu pessoalmente não tinha visto o algoritmo de casco convexo implementado no TeX. Você pode esclarecer o que você quis dizer comcoordenadas não ordenadas?

informação relacionada