Entlang einer Linie sollen gleichmäßig nodes platziert werden (so ähnlich wie bei Objekte entlang einer Geraden äquidistant anordnen und Wie kann ich TikZ-Knoten im Kreis anordnen?).

Die Frage ist, wie aus den x- und y-Koordinaten der Endpunkte von einer Geraden die nodes-Positionen ausgerechnet werden können. Hier ein Beispiel für 2 nodes:

Open in Online-Editor
\documentclass{standalone}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}

\usepackage{lmodern}
\usepackage{amsmath}

\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
\draw[help lines] (-1.5,-0.75) grid (2.5,3.75);
\draw[fill=blue] (0,0) node[yshift=-0.2cm] {$(x_1,y_1)$} circle (2pt) -- (1,3) node[yshift=0.3cm] {$(x_2,y_2)$} circle (2pt) ;
\draw[fill=red] (0.33,1) circle (4pt) node {1};
\draw[fill=red] (0.67,2) circle (4pt) node {2};
% Abstand Geraden-Endpunkte
\draw (0.5,-1.2) node {$\text{Abstand}=\sqrt{(x_1-x_2)^2+(y_1-y_2)^2}$};
\end{tikzpicture}

\end{document}

alt text

gefragt 26 Mär '15, 07:27

BraBra's gravatar image

BraBra
4295915
Akzeptiert-Rate: 20%

bearbeitet 26 Mär '15, 07:31


Ergänzend zur Antwort von @Henri ist hier mal noch eine Variante bei der unter Verwendung von foreach mehr als zwei Nodes auf der Gerade platziert werden.

Open in Online-Editor
\documentclass[margin=10pt]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[
    dot/.style={circle,draw,fill=#1,inner sep=1pt,font=\tiny},
    dot/.default=white
  ]
  \draw[help lines] (-1.5,-0.75) grid (2.5,3.75);
  \draw 
    (0,0)node[dot=blue,label={below:$(x_1,y_1)$}]{}--
    (1,3)node[dot=blue,label={above:$(x_2,y_2)$}]{}
    node foreach \i in {1,...,5}[pos={1/(5+1)*\i},dot=orange]{\i};
\end{tikzpicture}
\end{document}

alt text


Und noch eine weitere Variante mit der decorations.markings Bibliothek, bei der man auch die Anzahl der Nodes einfach variieren kann. Im Gegensatz zu meinem obigen Beispiel funktioniert das auch mit gebogenen Kurven.

Open in Online-Editor
\documentclass[margin=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.markings}
\newcounter{markcounter}
\begin{document}
\begin{tikzpicture}[
    dot/.style={circle,draw,fill=#1,inner sep=1pt,font=\tiny},
    dot/.default=white,
    dotfillcolor/.style={dot/.append style={fill=#1}},
    mymarks/.style={
      decoration={
        markings,
        mark=
          between positions {1/(#1+1)} and {#1/(#1+1)} step {1/(#1+1)}
          with{\stepcounter{markcounter}\node[dot]{\themarkcounter};}
       },decorate
    }
  ]
  \draw[help lines] (-1.5,-0.75) grid (2.5,3.75);
  \draw[postaction={dotfillcolor=orange,mymarks=2}]
    (-1,0)node[dot=blue]{}--(0,3)node[dot=blue]{};
  \draw[postaction={dotfillcolor=purple!80,mymarks=7}]
    (0,0)node[dot=green]{}.. controls (2,0) and (3,3) ..(1,3)node[dot=green]{};
\end{tikzpicture}
\end{document}

alt text

Permanenter link

beantwortet 26 Mär '15, 11:24

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

Nodes entlang des Pfades

Wenn es nur darum geht die Punkte zu referenzieren ohne unbedingt die Koordinaten zu kennen kann ich nur empfehlen die Nodes einfach auf der Linie zu platzieren und mittels pos=<Bruchteil> beim gewünschten Bruchteil der Gerade zu platzieren. Am Ende befindet sich ein Beispielschnipsel, der einen Pfeil zwischen den beiden Nodes zeichnet. Im Übrigen habe ich alle Pakete entfernt, die nicht benötigt werden (Minimalbeispiel) und habe amsmath durch seinen Nachfolger mathtools ersetzt.

Open in Online-Editor
\documentclass[tikz]{standalone}
\usepackage{mathtools}
\begin{document}
\begin{tikzpicture}[
  dot/.style={draw,fill=#1,circle,inner sep=1pt},
  dot/.default=black,
  ]
\draw[help lines] (-1.5,-0.75) grid (2.5,3.75);
\draw[fill=blue] (0,0) node[dot=blue,label={below:$(x_1,y_1)$}] {} --
node[pos=.333,dot=red] (n1) {1} node[pos=.666,dot=red] (n2) {2}
(1,3) node[dot=blue,label={above:$(x_2,y_2)$}] {};
% Abstand Geraden-Endpunkte
\draw (0.5,-1.2) node {$\text{Abstand}=\sqrt{(x_1-x_2)^2+(y_1-y_2)^2}$};
% Beispiel fürs referenzieren
\draw[very thick,->] (n1) to[bend left] (n2);
\end{tikzpicture}
\end{document}

alt text

let

Mit Hilfe der Bibliothek calc und der let Operation kann man den Abstand und die damit verbundenen Positionen auch von Hand berechnen. Hier ist ziemlich einfach, da der eine der beiden Punkte einfach (0,0) ist und man daher keinen Offset einführen muss. Die Ausgabe ist ähnlich wie oben nur, dass der Pfeil fehlt.

Open in Online-Editor
\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\usepackage{mathtools}
\begin{document}
\begin{tikzpicture}[
  dot/.style={draw,fill=#1,circle,inner sep=1pt},
  dot/.default=black,
  ]
\draw[help lines] (-1.5,-0.75) grid (2.5,3.75);
\draw[fill=blue] (0,0) node[dot=blue,label={below:$(x_1,y_1)$}] {} --
(1,3) node[dot=blue,label={above:$(x_2,y_2)$}] {};
\path let \p1 = (0,0),
          \p2 = (1,3),
          \n1 = {veclen(\x1,\x2)},
          \n2 = {veclen(\y1,\y2)}
      in (\n1/3,\n2/3) node[dot=red] {1}
         (2*\n1/3,2*\n2/3) node[dot=red] {2};
% Abstand Geraden-Endpunkte
\draw (0.5,-1.2) node {$\text{Abstand}=\sqrt{(x_1-x_2)^2+(y_1-y_2)^2}$};
\end{tikzpicture}
\end{document}

decorations.markings

Die decorations.markings Bibliothek bietet die Option mark=at position <pos> with <code> wobei <pos> verschiedene Bedeutungen haben kann, z.B. eine explizite Länge mit Einheit oder auch wie im Beispiel unten ein Bruchteil der Länge des Pfades. Der Parameter <code> setzt wieder die Nodes. Bild analog zu oben.

Open in Online-Editor
\documentclass[tikz]{standalone}
\usetikzlibrary{decorations.markings}
\usepackage{mathtools}
\begin{document}
\begin{tikzpicture}[
  dot/.style={draw,fill=#1,circle,inner sep=1pt},
  dot/.default=black,
  ]
\draw[help lines] (-1.5,-0.75) grid (2.5,3.75);
\draw[fill=blue,decoration={%
  markings,
  mark=at position .333 with {\node[dot=red] {1};},
  mark=at position .666 with {\node[dot=red] {2};}
},postaction=decorate]
(0,0) node[dot=blue,label={below:$(x_1,y_1)$}] {} --
(1,3) node[dot=blue,label={above:$(x_2,y_2)$}] {};
% Abstand Geraden-Endpunkte
\draw (0.5,-1.2) node {$\text{Abstand}=\sqrt{(x_1-x_2)^2+(y_1-y_2)^2}$};
\end{tikzpicture}
\end{document}
Permanenter link

beantwortet 26 Mär '15, 08:55

Henri's gravatar image

Henri
15.7k133943
Akzeptiert-Rate: 46%

bearbeitet 26 Mär '15, 09:08

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×730
×76
×41

gestellte Frage: 26 Mär '15, 07:27

Frage wurde gesehen: 12,631 Mal

zuletzt geändert: 26 Mär '15, 11:24