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, 02:27

BraBra's gravatar image

BraBra
429515
Akzeptiert: 88%

bearbeitet 26 Mär '15, 02: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, 06:24

esdd's gravatar image

esdd
14.2k53251

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, 03:55

Henri's gravatar image

Henri
10.0k31730

bearbeitet 26 Mär '15, 04:08

Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×492
×51
×31

Frage gestellt: 26 Mär '15, 02:27

Frage wurde angeschaut: 2,708 Mal

Zuletzt aktualisiert: 26 Mär '15, 06:24