Knoten vs. Koordinaten. Linien werden innerhalb von Knoten gezeichnet

Knoten vs. Koordinaten. Linien werden innerhalb von Knoten gezeichnet

Die Darstellung versucht, die Gelenke und Verbindungen eines Robotermanipulators zu zeichnen. Anfangs habe ich die Punkte für die Gelenke als nodes definiert, was zu einigen Verschiebungen führte, als später Linien zwischen ihnen gezeichnet wurden. Basierend auf den Antworten von SE habe ich dies in einen dreistufigen Prozess geändert, bei dem ich zuerst coordinates definierte, dann Gelenke an den Koordinaten zeichnete und sie später mit Linien verband.

Jetzt verlaufen die Linien jedoch innerhalb der Verbindung. Ich möchte die Eigenschaft von Knoten haben, bei der Linien nur bis zu den Grenzen des Knotens gezeichnet werdenUnddie Eigenschaft von Koordinaten, bei der die Linien genau auf die Koordinate gezeichnet werden? (Mir ist klar, dass ich die Gelenke einfach nach dem Zeichnen der Verbindungen zeichnen und sie dadurch überschreiben kann, aber ich bevorzuge es, die Knoten aus anderen Gründen als ungefüllte Kreise wie in dieser Abbildung zu haben)

Wie erreiche ich das?

MWE und Ergebnisse mit Knoten und Koordinaten unten.

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

mit Koordinatenmit Koordinaten

mit Knotenmit Knoten

Antwort1

Eine andere Möglichkeit ist der „Ein-Schritt“-Ansatz, der (meiner Meinung nach) klarer und einfacher ist. Dafür verwende ich die TikZ-Bibliothek 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}

Ergebnis:

Bildbeschreibung hier eingeben

Bearbeiten: Die oben vorgeschlagene Lösung hat nur ein Tikz-Bild, im Gegensatz zu drei in Ihrem Ansatz. Damit haben Sie drei unabhängige Bilder, die sich gegenseitig überlagern. Dabei scheinen einige Informationen zum korrekten Zeichnen von Knoten verloren zu gehen.

Antwort2

Sie könnten den Pfad stückweise zeichnen:

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

Bildbeschreibung hier eingeben

Antwort3

Vielleicht können Sie chainsfür diese Art von Diagrammen die Verwendung einer Bibliothek in Betracht ziehen. Wenn Sie der Kette Elemente hinzufügen, werden Verbindungen zwischen ihnen gezeichnet.

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

Bildbeschreibung hier eingeben

Aktualisieren

Die Verwendung chainsschränkt keine Platzierungsbeziehung zwischen Knoten ein. Es ist möglich, alle Knoten und später auf ihnen zu platzieren oder sie einfach dort zu platzieren, wo Sie möchten, während sie das und zwischen ihnen chainbilden .chainjoining

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

Bildbeschreibung hier eingeben

verwandte Informationen