Anzeige:
Ergebnis 1 bis 6 von 6

Thema: TikZ: Nodes als Pfeile zeichnen und nicht als Kreise, geht das?

  1. #1
    Registrierter Benutzer
    Registriert seit
    15.02.2009
    Beiträge
    44

    TikZ: Nodes als Pfeile zeichnen und nicht als Kreise, geht das?

    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:
    Code:
    \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:
    Code:
    \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:
    Code:
    \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):
    Code:
    \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.

  2. #2
    Registrierter Benutzer
    Registriert seit
    06.08.2008
    Beiträge
    1.015
    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):
    Code:
    \draw[->,thick] (110.center) -- (30:0.5);

  3. #3
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    496
    Hallo,
    vielleicht hilft dir das folgende:
    Code:
    \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

  4. #4
    Registrierter Benutzer
    Registriert seit
    15.02.2009
    Beiträge
    44
    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.

  5. #5
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    496
    Hallo,

    in der tikzlibrary shapes.arrows gibt es auch eine Node in Pfeilform, so dass auch folgendes möglich ist:
    Code:
    \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

  6. #6
    Registrierter Benutzer
    Registriert seit
    15.02.2009
    Beiträge
    44
    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.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •