TikZ: Probleme mit Positionierung einer Grafik

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: TikZ: Probleme mit Positionierung einer Grafik

von esdd » Mi 13. Apr 2011, 14:43

Hallo,

ich habe gar nicht mitbekommen, dass du eigentlich nur so etwas wie -|- brauchst, um West einer Node mit Ost einer anderen mit der speziellen Doppellinie zu verbinden. Nun ist es vielleicht schon zu spät, aber trotzdem ein Vorschlag:
\documentclass{scrartcl} 

\usepackage{tikz} 
\usetikzlibrary{calc}

\newlength\mycoordx
\newlength\mycoordy 

\newcommand\meinCommand[3][0.6]{% 
  \node[minimum width=2*#1cm,circle,draw](#2)at(#3){A};} 
%\meinCommand[radius]{Nodenbezeichnung}{x,y} 

\newcommand\drawConnection[5][5]{% 
  \coordinate(d)($(#2)-(#4)$);
  \pgfextractx{\mycoordx}{d}\pgfextracty{\mycoordy}{d}
  \pgfmathtruncatemacro{\vorz}{-(0>\mycoordx*\mycoordy)+(0<\mycoordx*\mycoordy)}
  \draw let \n1={#3+#1}, \n2={#5-#1},%
            \p3=($(#2.#3)-(#2.\n1)$), \p4=($(#2.\n1)!0.5!(#4.\n2)$) in %
            (#2.\n1)--(#2.\n1-|\x4+\vorz*\y3,0)|-(#4.\n2); 
  \draw[dashed] let \n1={#3-#1}, \n2={#5+#1},%
                    \p3=($(#2.#3)-(#2.\n1)$), \p4=($(#2.\n1)!0.5!(#4.\n2)$) in %
                    (#2.\n1)--(#2.\n1-|\x4+\vorz*\y3,0)|-(#4.\n2);}
%\drawConnection[Gradverschiebung]{Node1}{Grad1}{Node2}{Grad2} 
%Vertauschung der Noden fuehrt zu Vertauschung der Linien 

\begin{document} 
  \begin{tikzpicture} 
    \draw[help lines] (-2,-4)grid(9,4); 
% 
    \meinCommand{P1}{0,0} 
    \meinCommand{P2}{3,-3} 
    \meinCommand{P3}{6,-3} 
    \meinCommand{P4}{6,0} 
    \meinCommand{P5}{8,3} 
%% 
    \drawConnection{P1}{0}{P2}{180}
    \drawConnection{P2}{0}{P3}{180}
    \drawConnection{P3}{90}{P4}{270}
    \drawConnection{P4}{0}{P5}{180} 
%%

  \end{tikzpicture} 
\end{document}
Grüße
Elke

von SenZe » Sa 5. Feb 2011, 22:36

Guten Abend,

Es sei mir verziehen, wenn ich den Thread noch einmal hochbringe. Ich habe leider immer noch keine Lösung für das o.g. Problem gefunden und würde mich freuen, wenn hier jemand helfen könnte.

von SenZe » Fr 21. Jan 2011, 13:34

Hallo,

Ich habe mich nun nocheinmal mit der oben genannten Verbindungsfunktion auseinandergesetzt und versucht, diese um zwei Argumente zu erweitern, sodass mein einen beliebigen Zwischenpunkt angeben kann, durch den die Linien gehen:
\drawConnection[Gradverschiebung]{Node1}{Grad1}{Verbindung1}{ViaPunkt}{Verbindung2}{Node2}{Grad2}
Dies ist vor allem dann nötig, wenn man den westlichen Punkt einer Node mit dem Östlichen einer anderen Node, die nicht auf der selben Höhe liegt, schön verbinden möchte.

Leider klappt das so nicht wirklich. Ich denke auch, dass meine Anläufe zu unflexibel und schlecht sind, um hier als Minimalbeispiel gepostet zu werden. Daher wende ich mich in der Sache nochmal an euch, insbesondere an Dich, Elke. Wisst ihr/weißt du, wie man den Befehl um die oben beschriebene Möglichkeit erweitern könnte? Hier nochmal der das Grundgerüst des Befehls:
\newcommand\drawConnection[6][5]{%  
  \draw let \n1={#3+#1}, \n2={#6-#1} in (#2.\n1)#4(#5.\n2);
  \draw[dashed] let \n1={#3-#1}, \n2={#6+#1} in (#2.\n1)#4(#5.\n2);} 
Am einfachsten wäre es natürlich, wenn TikZ neben dem Verbindungsoperator "-|" auch "-|-" anbieten würde, das würde genau dem Problem entsprechen. Aber eine Suche in der Doku förderte nichts Ähnliches zu Tage, oder habe ich etwas übersehen?

von iTob » Mi 19. Jan 2011, 22:34

Klar kann man TikZ nicht auf anhieb erfassen. Ich selbst habe mit Chains auch noch nix gemacht, weil ich dafür bisher keine Anwendung hatte, kann dir da also nicht helfen, aber es gibt ja sicher andere hier …
Ich wollte dich dennoch darauf hinweisen und dich eventuell davor bewahren, das Rad ein zweites Mal zu erfinden. Das Besagte Tutorial ist in der TikZ-Doku übrigens auf Seite 60 zu finden.


Gute Nacht!
Tobi

PS: „offen“ oder eben „mit Vorschlag“

von SenZe » Mi 19. Jan 2011, 20:46

Okay, das mit dem Status habe ich falsch verstanden, Entschuldigung dafür. Ich nehme an, "offen" wäre dann passender.

Ich habe immer mal wieder im TikZ-Handbuch gelesen, ja, der Begriff Chains ist mir dabei auch ab und zu untergekommen. Als LaTeX-Anfänger, der kaum einen Überblick über das wirklich mächtige TikZ hat und überhaupt nicht weiß, wonach er suchen soll, ist es dann aber doch relativ schwer, solche Probleme zu lösen.

Daher hoffe ich, dass mir dabei auch weiter so super geholfen wird wie bisher ;)

von iTob » Mi 19. Jan 2011, 18:31

Sag mal könnte es sein, dass alles was du willst als Kette (=chain) ohnehin schon in TikZ vorgesehen ist? Hast du mal das Handbuch gelesen – wenigstens den Abschnitt und das Tutorial (zu Beginn) über chains?

Das nur so als Randbemerkung, bevor du dir hier ewig einen abbrichst eigene Befehle zu basteln (basteln zu lassen) …


PS: „Rückfrage“ meint, dass die Antwortenden eine Rückfrage haben, nicht dass der Fragensteller noch eine weitere Frage anhängt.

von SenZe » Mi 19. Jan 2011, 17:51

Ah, ich verstehe, danke.

Wüsstest du, wie man die drawConnection-Funktion möglichst einfach so anpassen kann, dass man optional noch einen dritten Punkt (oder, wenn einfach realisierbar, auch mehrere) übergeben kann, der ein "Zwischenpunkt" der zu zeichnenden Verbindung ist? Ich meine dass so, dass die gezeichnete Verbindung dann vom Startpunkt über den Zwischenpunkt/die Zwischenpunkte zum Endpunkt verläuft.

Fällt dir da was ein?

Danke schonmal!

Viele Grüße

von esdd » Mi 19. Jan 2011, 14:04

Hallo,

die Zahlen nach den Punkten bei den Noden sind die entsprechenden Gradangaben: (P1.0) ist also das gleiche wie (P1.east), (P2.90) wie (P2.north) und so weiter.
Die Verschiebung der Linien erreiche ich, in dem ich die "Gradverschiebung" (hier 5) zu der vorgegebenen Gradzahl dazuaddiere oder von ihr abziehe. Die erste durchgezogene Linie geht also von (P1.5) nach (P2.85) und die zugehörige gestrichelte von (P1.-5) nach (P2.95).
Der Abstand zwischen beiden Linien ist gleich dem Doppelten von Nodenradius*sin(Gradverschiebung), in dem Fall also das Doppelte von 0.6*sin5°

Gruß
Elke

von SenZe » Mi 19. Jan 2011, 12:51

Hallo Elke,

Danke, das funktioniert super!

Könntest du mir bitte noch kurz den Befehl
\newcommand\drawConnection[6][5]{%  
  \draw let \n1={#3+#1}, \n2={#6-#1} in (#2.\n1)#4(#5.\n2);
  \draw[dashed] let \n1={#3-#1}, \n2={#6+#1} in (#2.\n1)#4(#5.\n2);}
%\drawConnection[Gradverschiebung]{Node1}{Grad1}{Verbindung}{Node2}{Grad2}
%Vertauschung der Noden fuehrt zu Vertauschung der Linien 
erklären?

Meine Fragen dazu:
Was bedeutet bei dir das Argument Gradverschiebung? Ist das der Platz zwischen den beiden Linien?
Was sind diese \n1 und \n2, die du definierst, und was bedeutet die Struktur, in der du diese anwendest? (Ich meine hier insbesondere den Teil
... in (#2.\n1)#4(#5.\n2)
.

Nochmals vielen Dank!

Viele Grüße

von esdd » Mi 19. Jan 2011, 10:17

Hallo,

hier ein Vorschlag, bei dem ich davon ausgegangen bin, dass alle Noden gleich groß sind:
\documentclass{scrartcl}

\usepackage{tikz}
\usetikzlibrary{calc}

\newcommand\meinCommand[3][0.6]{%
  \node[minimum width=2*#1cm,circle,draw](#2)at(#3){A};}
%\meinCommand[radius]{Nodenbezeichnung}{x,y} 


\newcommand\drawConnection[6][5]{%  
  \draw let \n1={#3+#1}, \n2={#6-#1} in (#2.\n1)#4(#5.\n2);
  \draw[dashed] let \n1={#3-#1}, \n2={#6+#1} in (#2.\n1)#4(#5.\n2);}
%\drawConnection[Gradverschiebung]{Node1}{Grad1}{Verbindung}{Node2}{Grad2}
%Vertauschung der Noden fuehrt zu Vertauschung der Linien
\begin{document}
  \begin{tikzpicture}
    \draw[help lines] (-4,-4)grid(8,2);
%
    \meinCommand{P1}{0,0}
    \meinCommand{P2}{3,-3}
    \meinCommand{P3}{6,-3}
    \meinCommand{P4}{6,0}
    \meinCommand{P5}{8,3}
%
    \drawConnection{P1}{0}{-|}{P2}{90}
    \drawConnection{P2}{0}{--}{P3}{180}
    \drawConnection{P4}{270}{--}{P3}{90}
    \drawConnection{P5}{180}{-|}{P4}{90}
  \end{tikzpicture}
\end{document}
Gruß
Elke

Nach oben