nós versus coordenadas. linhas são desenhadas dentro dos nós

nós versus coordenadas. linhas são desenhadas dentro dos nós

A trama tenta desenhar as juntas e elos de um manipulador robótico. Inicialmente defini os pontos para as juntas como nodese isso resultou em alguma mudança quando linhas foram posteriormente traçadas entre elas. Com base nas respostas do SE, mudei isso para um processo de três etapas onde primeiro defini coordinates, depois desenhei juntas nas coordenadas e depois as conectei com linhas.

Porém, agora as linhas vão para dentro da junta. Quero ter a propriedade dos nós onde as linhas são desenhadas apenas até as bordas do nóea propriedade das coordenadas onde as linhas são desenhadas exatamente na coordenada? (Sei que posso simplesmente desenhar as juntas depois de desenhar os links, substituindo-os, mas prefiro ter os nós como círculos não preenchidos como nesta figura por outros motivos)

Como faço para conseguir isso.

MWE e resultados com nós e coordenadas abaixo.

\documentclass[tikz]{standalone}
\usetikzlibrary{math}
\begin{document}
\foreach \mynodes/\numnodes in {{1/0,2/90,3/0}/3}{%
\begin{tikzpicture}[scale=1]
\draw (-1,-1) [help lines] grid (3,2);

% define coordinates for joints
\node (0,0)(n0){};
\path (0,0)
    foreach \nodeid/\nodeangle in \mynodes{
         ++(\nodeangle:1) node(n\nodeid){}
    };

%draw links
\draw [red, ultra thick](0,0)
    foreach \nodeid in {1,...,\numnodes}{
        -- (n\nodeid)
    };

%draw joints
\foreach \nodeid in {0,1,...,\numnodes}{%
    \draw [black, thick](n\nodeid) circle [radius=1mm];
};

\end{tikzpicture}
}
\end{document}

com coordenadascom coordenadas

com nóscom nós

Responder1

Outra possibilidade é a abordagem “em uma etapa”, que é (na minha opinião) mais clara e simples. Para isso eu uso a biblioteca TikZ calc:

\documentclass[tikz]{standalone}
    \usetikzlibrary{calc}

\begin{document}
    \begin{tikzpicture}[
every node/.style = {circle, draw=red, thick, 
                     minimum size=2mm, inner sep=0pt}
                        ]
\draw (-1,-1) [help lines] grid (3,2);
% graph
\node (n1) at (0,0) {};
\foreach \nodeangle [count=\lastid from 1, count=\nodeid from 2] in {0,90,0} 
{
         \node (n\nodeid) at ($(n\lastid) + (\nodeangle:10mm)$) {};
         \draw (n\lastid) -- (n\nodeid);
}
    \end{tikzpicture}
\end{document}

Resultado:

insira a descrição da imagem aqui

Editar: A solução proposta acima tem apenas uma imagem Tikz contra três em sua abordagem. Com ele você tem três imagens independentes que se sobrepõem umas às outras. Nisto algumas informações para o desenho adequado dos nós parecem ser perdidas.

Responder2

Você poderia desenhar o caminho por partes:

\documentclass[tikz]{standalone}
\usetikzlibrary{math}
\begin{document}
\foreach \mynodes/\numnodes in {{1/0,2/90,3/0}/3}{%
\begin{tikzpicture}[scale=1]
\draw (-1,-1) [help lines] grid (3,2);

% define coordinates for joints
\node (0,0)(n0){};
\path (0,0)
    foreach \nodeid/\nodeangle in \mynodes{
         ++(\nodeangle:1) node(n\nodeid){}
    };

%draw links

    \foreach \nodeid in {1,...,\numnodes}{
      \draw [red, ultra thick](n\the\numexpr\nodeid-1) --(n\nodeid);
    };

%draw joints
\foreach \nodeid in {0,1,...,\numnodes}{%
    \draw [black, thick](n\nodeid) circle [radius=1mm];
};

\end{tikzpicture}
}
\end{document}

insira a descrição da imagem aqui

Responder3

Pode ser que você considere usar chainsuma biblioteca para esse tipo de gráfico. Ao mesmo tempo que você adiciona elementos à cadeia, são desenhadas junções entre eles.

\documentclass[tikz, border=2mm]{standalone}
\usetikzlibrary{chains}

\begin{document}

\begin{tikzpicture}[%
    on grid,
    scale=1,
    start chain=going right,
    every join/.style={thick, red, shorten >=1pt, shorten <=1pt},
    item/.style={
        draw, 
        thick,
        on chain,
        circle,
        minimum size=3mm,
        inner sep=0pt,
        join
        }
]
\draw (-1,-1) [help lines] grid (3,2);

\node [item] {};

\node [item] {};

\node [item, on chain= going above] {};

\node [item] {};

\end{tikzpicture}

\end{document}

insira a descrição da imagem aqui

Atualizar

O uso chainsnão restringe nenhuma relação de posicionamento entre nós. É possível colocar todos os nós e posteriormente sobre chaineles, ou apenas colocá-los onde quiser enquanto estão formando o chaine joiningentre eles.

\documentclass[tikz, border=2mm]{standalone}
\usetikzlibrary{chains}

\begin{document}

\begin{tikzpicture}[%
    scale=1,
    start chain,
    every join/.style={thick, red, shorten >=1pt, shorten <=1pt},
    item/.style={
        draw, 
        thick,
        on chain,
        circle,
        minimum size=3mm,
        inner sep=0pt,
        join
        }
]

\foreach \i in {1,...,5}
    \node [item] (\i) at (3*rand,3*rand) {};

\end{tikzpicture}

\end{document}

insira a descrição da imagem aqui

informação relacionada