nodos vs coordenadas. Las líneas se dibujan dentro de los nodos.

nodos vs coordenadas. Las líneas se dibujan dentro de los nodos.

La trama intenta dibujar las articulaciones y eslabones de un manipulador robótico. Inicialmente definí los puntos para las uniones como nodes y esto resultó en cierto cambio cuando luego se dibujaron líneas entre ellas. Según las respuestas de SE, cambié esto a un proceso de tres pasos en el que primero definí coordinates, luego dibujé uniones en las coordenadas y luego las conecté con líneas.

Sin embargo, ahora las líneas van dentro del porro. Quiero tener la propiedad de los nodos donde las líneas se dibujan solo hasta los bordes del nodo.y¿La propiedad de las coordenadas donde las líneas se dibujan exactamente en la coordenada? (Me doy cuenta de que puedo simplemente dibujar las uniones después de dibujar los enlaces, sobrescribiéndolos así, pero prefiero tener los nodos como círculos vacíos como en esta figura por otras razones)

Cómo logro esto.

MWE y resultados con nodos y coordenadas a continuación.

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

con coordenadascon coordenadas

con nodoscon nodos

Respuesta1

Otra posibilidad es el enfoque de "un solo paso", que es (en mi opinión) más claro y sencillo. Para ello utilizo la 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:

ingrese la descripción de la imagen aquí

Editar: La solución propuesta anteriormente tiene solo una imagen de Tikz frente a tres en su enfoque. Con él tienes tres imágenes independientes que se superponen entre sí. En esto parece perderse cierta información para dibujar correctamente los nodos.

Respuesta2

Podrías dibujar el camino 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}

ingrese la descripción de la imagen aquí

Respuesta3

Quizás puedas considerar usar chainsla biblioteca para este tipo de gráficos. Al mismo tiempo que agregas elementos a la cadena, se dibujan las uniones entre ellos.

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

ingrese la descripción de la imagen aquí

Actualizar

El uso chainsno limita ninguna relación de ubicación entre nodos. Es posible colocar todos los nodos y luego sobre chainellos, o simplemente colocarlos donde quieras mientras se forman los chainy joiningentre ellos.

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

ingrese la descripción de la imagen aquí

información relacionada