PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : TikZ: Nodes als Pfeile zeichnen und nicht als Kreise, geht das?



andi67
04-12-2012, 18:08
Hallo,
ich benutze TikZ um mir Gitterstrukturen zu zeichnen.
Ich habe mir ein Programm geschrieben das mir, auf basis eines komplizierteren aber für mein Problem unwichtigen Algoritmus', eine Liste mit TikZ Nodes ausgibt.
Sie sieht ungefähr so aus:


\node (110) at (1.124124,0.00000) [nodestyle] {};
\node (210) at (1.000000,4.23530) [nodestyle] {};
\node (300) at (4.324250,2.00000) [nodestyle] {};
.......

Im Prinzip berechne ich die Positionen wo ich die Nodes haben will, ganz genau will ich an diesen Stellen kleine Kreise zeichnen, das konnte ich praktischerweise für alle Nodes durch eine Styledefiniton machen:


\tikzstyle{nodestyle}=[circle,draw=black,fill=red,inner sep=0,minimum size=3.5mm]


Jetzt brauche ich aber eine andere Darstellung, nämlich anstelle der Kreise will ich an den Positionen kleine Pfeile zeichnen.

Was schonmal geht ist an den Positionen der Nodes mittels draw Pfeile zu malen:


\draw[->,thick] (110.center) --+(0,0.5);
...


Das Problem dabei ist, dass ich so mein Programm anpassen muss.
Wenn ich die Nodes behalte dann, muss ich sie unsichtbar machen und kann dann dne draw Befehl nutzen, somit hätte ich aber zwei Zeilen für nur ein Objekt das scheint mir unpraktisch. Ich könnte auch die Nodes komplett rausschmeissen und nur den draw Befehlt nutzen, dann scheint mir aber eine Möglichkeit die Pfeile Auszurichten verloren zu gehen (siehe mein zweites Problem unten).
Ich würde das gerne nur durch änderung des tikzstyles für den Node "nodestyle" machen. Also den Node nicht als Kreis/circle sondern als Pfeil zeichnen.
Ich kenne mich noch nicht wirklich gut mit TikZ aus deshalb waren meine Versuche das zu lösen auch alle erfolglos.

Deshalb erstmal die grundsätzliche Frage, geht das überhaupt und wenn ja wie?

Ein anderes Problem betrifft die Darstellung selbst, so wie ich den Pfeil oben mit draw zeichne, ist sein startpunkt im Center des Nodes. Ich habe festgestellt das es besser aussieht wenn ich den Pfeil verschiebe und zwar so, dass die Mitte des Pfeiles (nicht sein Startpunkt) im Center des Nodes liegt (den Node habe ich unsichtbar gemacht aber von der Größe so gelassen):


\draw[->,thick] (110.south) --+(0,0.5);

dieser Pfeil zeigt nach oben.
Nun ist es aber leider so, dass ich auch Pfeile habe die in eine belibige Richtung zeigen, also nicht nur das oben, unten, links oder rechts. D.h. mit south,north,east und west komme ich nicht aus, gibt es da noch weitere Optionen?

danke schonmal.

hakaze
04-12-2012, 19:58
zum Ersten: ein node ist ja nur ein Punkt, ein Pfeil aber ein Vektor. Also müsstest mit dem nodestyle dann noch eine weitere Koordinate übergeben, damit ein Pfeil gezeichnet werden kann. (Dazu habe ich aktuell noch keine Idee.)

zum Zweiten: du kannst auch die zweite Koordinate als Polarkoordinate angeben (wahlweise auch mir rand als Winkel):
\draw[->,thick] (110.center) -- (30:0.5);

esdd
04-12-2012, 20:11
Hallo,
vielleicht hilft dir das folgende:

\documentclass{standalone}
\usepackage{tikz}
\newcommand\Pfeil{%
\tikz\draw[thick,->](-0.25,0)--(0.25,0);}
\begin{document}
\begin{tikzpicture}
\node (110) at (1.124124,0.00000) [rotate=60] {\Pfeil};
\node (210) at (1.000000,4.23530) {\Pfeil};
\node (300) at (4.324250,2.00000) [rotate=170] {\Pfeil};
\end{tikzpicture}
\end{document}
Dabei werden die Pfeile als Inhalt der Noden gezeichnet und du kannst sie beliebig drehen.
Gruß
Elke

andi67
04-12-2012, 21:17
Erstmal vielen dank, das sind genau die Vorschläge auf die ich gehofft habe. Insbesondere wusste ich nicht das ich Polarkoordinaten verwenden kann, das erleichtert mir das weitere Vorgehen enorm.

Dein Beispiel esdd scheint genau das erreichen was ich bezwecken will danke nochmal dafür. Ich kann es erst morgen testen aber ich denke das passt schon :)
Ich werde morgen aber nochmal schreiben ob es alles klappt.

esdd
05-12-2012, 08:36
Hallo,

in der tikzlibrary shapes.arrows gibt es auch eine Node in Pfeilform, so dass auch folgendes möglich ist:

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.arrows}
\tikzset{%
pfeil/.style={single arrow,draw=black,%
fill=red,inner sep=0.2pt,%
minimum height=0.5cm,% Länge des Pfeils
single arrow head extend=0.4mm,%
single arrow tip angle=60,%
rotate=#1]},% Rotation als Parameter
pfeil/.default=0% Voreinstellung: keine Rotation
}
\begin{document}
\begin{tikzpicture}
\node (110) at (1.124124,0.00000) [pfeil=60] {};
\node (210) at (1.000000,4.23530) [pfeil]{};
\node (300) at (4.324250,2.00000) [pfeil=170] {};
\end{tikzpicture}
\end{document}
Gruß
Elke

andi67
05-12-2012, 12:40
Also die erste Variante funktioniert schonmal super, macht genau das was ich wollte. Die Variante mit den shapes.arrows muss ich mir noch anschauen.
Vielen Dank nochmals.