As bordas do gráfico TikZ não foram bem desenhadas

As bordas do gráfico TikZ não foram bem desenhadas

Ainda sou novo no uso do Tikz... Estou tentando desenhar um gráfico semelhante a uma roda usando o TikZ. Eu fiz o gráfico básico, mas não está saindo como eu esperava. As bordas do meu gráfico não estão bem centralizadas/alinhadas.

As arestas parecem seguir as coordenadas em vez de desenhar uma linha reta de caminho mais curto entre os nós, parando em suas representações circulares. Algumas das arestas são boas (como v1 a v2, v1 a v6, ...), mas outras não (como v2 a v3).

Aqui está meu código para a imagem TikZ e uma imagem mostrando o que estou recebendo.

\begin{tikzpicture}[auto, scale=0.9]
\tikzstyle{vertex}=[draw, circle, inner sep=0.55mm]
\node (v1) at (0,0) [vertex] {};
\node (v2) at (1,0) [vertex] {};
\node (v3) at  (1.5,-1) [vertex] {};
\node (v4) at (1,-2) [vertex] {};
\node (v5) at (0,-2) [vertex] {};
\node (v6) at (-.5,-1) [vertex] {};
\node (v7) at  (.5,-1) [vertex, fill=blue] {};

\foreach \x in {2, 3, 4, 5, 6, 7}{
    \pgfmathsetmacro\y{\x - 1}
    \draw (v\y) to (v\x);
}
\draw (v6) to (v1);
\draw (v5) to (v7);
\draw (v4) to (v7);
\draw (v3) to (v7);
\end{tikzpicture}

gráfico tipo roda com bordas feias

Responder1

Isso ocorre porque o cálculo de \y não fornece um número inteiro. Existem duas possibilidades:

  • a primeira é usar a macro \pgfmathtruncatemacroem vez de\pgfmathsetmacro
  • a segunda é avaliar \ydentro do próprio loop foreach

\documentclass[tikz,border=5mm]{standalone}

\usetikzlibrary{calc}

\begin{document}
\begin{tikzpicture}[auto, scale=0.9]
\tikzstyle{vertex}=[draw, circle, inner sep=0.55mm]
\node (v1) at (0,0) [vertex] {};
\node (v2) at (1,0) [vertex] {};
\node (v3) at  (1.5,-1) [vertex] {};
\node (v4) at (1,-2) [vertex] {};
\node (v5) at (0,-2) [vertex] {};
\node (v6) at (-.5,-1) [vertex] {};
\node (v7) at  (.5,-1) [vertex, fill=blue] {};

\foreach \x[evaluate=\x as \y using int(\x-1)] in {2, 3, 4, 5, 6, 7}{
    %\pgfmathtruncatemacro\y{\x - 1}
    \draw (v\y) to (v\x);
}
\draw (v6) to (v1);
\draw (v5) to (v7);
\draw (v4) to (v7);
\draw (v3) to (v7);
\end{tikzpicture}
\end{document}

captura de tela

Responder2

\tikzstyleestá obsoleto e o problema é que \pgfmathsetmacronão produz números inteiros, mas algo como 2.0, onde .0é interpretado como âncora do nó.

\documentclass[tikz,border=3.14mm]{standalone}
\begin{document}
\begin{tikzpicture}[auto, scale=0.9]
\tikzset{vertex/.style={draw, circle, inner sep=0.55mm}}
\node (v1) at (0,0) [vertex] {};
\node (v2) at (1,0) [vertex] {};
\node (v3) at  (1.5,-1) [vertex] {};
\node (v4) at (1,-2) [vertex] {};
\node (v5) at (0,-2) [vertex] {};
\node (v6) at (-.5,-1) [vertex] {};
\node (v7) at  (.5,-1) [vertex, fill=blue] {};

\foreach \x [remember =\x as \lastx (initially 1)] in {2, 3, 4, 5, 6, 7}{
    \draw (v\lastx) to (v\x);
}
\draw (v6) to (v1);
\draw (v5) to (v7);
\draw (v4) to (v7);
\draw (v3) to (v7);
\end{tikzpicture}
\end{document}

insira a descrição da imagem aqui

Responder3

talvez você goste de:

\documentclass[tikz,border=5mm]{standalone}
\usetikzlibrary{shapes.geometric}

\begin{document}
\begin{tikzpicture}[
vertex/.style = {circle, draw, fill=#1, inner sep=0.5mm}
                    ]
%
\node (s) [regular polygon,regular polygon sides=6,
           draw, minimum size=20mm, above] at (0.5,-2) {};
\draw (s.corner 3) -- (s.corner 6);
\node (c) [vertex=blue] at (s.center) {};
%
\foreach \i in {1,...,6}{\node (s\i) [vertex=white] at (s.corner \i) {}; }

\draw (c) -- (s4)
      (c) -- (s5);
\end{tikzpicture}
\end{document}

insira a descrição da imagem aqui

Responder4

Para obter mais roda, você pode usar coordenadas polares, como (45:1)desenhar um nó à distância 1e 45 graus da origem. Aqui está uma versão alternativa com um número variável de nós. Altere o número \numNodes{6}para alterar o número de nós no círculo.

\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[
  auto, 
  scale=0.9,
  vert/.style={draw, circle, inner sep=0.55mm,fill=white}
  ]
  \newcommand\numNodes{6}
  \node[vert,fill=blue] (vC) at (0,0){};
  \draw (0:1) node[vert](v0) {}
  \foreach \n [evaluate = \n as \deg using {\n*360/\numNodes}] in {1,2,...,\numNodes}{
    -- (\deg:1) node[vert](v\n) {}
  };
  \foreach \n in {0,3,4,5}{
    \draw (vC) -- (v\n);
  }
\end{tikzpicture}

\end {document}

insira a descrição da imagem aqui

informação relacionada