PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tikz Abstand zweier Punkte



Poseidonius
27-03-2010, 10:21
Hallo Ihr "Obertikzer",

wenn ich ein Blockdiagramm wie das folgende zusammenbauen möchte




------------------------------------------
| Bla1 | bla2 |
------------------------------------------
| tralla |
------------------------------------------



geht das mit relativ gut. (Klar man kann die beiden Styles auch zusammenfassen)



\documentclass{article}
\usepackage{tikz}

\begin{document}

\tikzstyle{block}=[draw, minimum width= 6em,text centered,outer sep=0pt]
\tikzstyle{frame}=[draw, minimum width= 12em,text centered,outer sep=0pt]

\begin{tikzpicture}
\node [block] (BLA1) {bla1};
\node [block,anchor=west] at (BLA1.east)(BLA2){bla2};
\node [frame,anchor=north west] at (BLA1.south west)(TRALLA){Tralla};
\end{tikzpicture}

\end{document}


An diesem Beispiel ist es noch recht übersichtlich, aber in komplexeren Darstellungen wäre es sehr schön, wenn sich die Breite von Tralla automatisch ergeben würde. Ich müsste also für "minimum width" statt der 12em den Abstand von BLA1.west bis BLA2.east hinterlegen? Wie bekomme ich den heraus?

Grüße, Tausend Dank und ein schönes Wochenende

Poseidonius

esdd
27-03-2010, 13:23
Hallo,

Du könntest die Let Operation verwenden:



\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}

\tikzstyle{block}=[draw, minimum width= #1,text centered,outer sep=0pt]

\begin{tikzpicture}
\node [block=6em] (BLA1) {bla1};
\node [block=6em,anchor=west] at (BLA1.east)(BLA2){bla2};
\path
let \p1=($(BLA2.east)-(BLA1.west)$),\n1={veclen(\x1,\y1)} in
(BLA1.south west) node[block=\n1,anchor=north west](TRALLA){Tralla};
\end{tikzpicture}

\end{document}

Gruß
Elke

Poseidonius
27-03-2010, 17:17
Wie immer vielen Dank an esdd!

Poseidonius
24-09-2010, 10:14
Nochmal hinterher ...

Wie müsste der folgende Code ergänzt werden, damit in \dist der Abstand der beiden Kreismittelpunkte steht?



\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}
\begin{tikzpicture}

\node [shape=circle,draw] (Tralla) {Tralla};
\node at (Tralla.south) [shape=circle,anchor=north, draw] {Trulla};

% Ich hatte mir sowas vorgestellt wie :
\newlength{\dist}
\setlength{\dist}{$(Tralla)-(Trulla)$}

\end{tikzpicture}
\end{document}


Vielen Dank wie immer und ein schönes Wochenende

Poseidonius

esdd
24-09-2010, 21:09
Hallo,

wenn Du den Abstand nur innerhalb der tikz Umgebung brauchst, dann kannst Du das zum Beispiel so lösen:


\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\newlength\vecx
\newlength\vecy
\newlength\dist

\begin{document}
\begin{tikzpicture}
\node[circle,draw] (Tralla) {Tralla};
\node[circle,anchor=north, draw] at (Tralla.south) (Trulla) {Trulla};
\coordinate(Dist)at($(Tralla)-(Trulla)$);
\pgfextractx{\vecx}{\pgfpointanchor{Dist}{center}}
\pgfextracty{\vecy}{\pgfpointanchor{Dist}{center}}
\pgfmathsetlength\dist{veclen(\vecx,\vecy)}
\node at (5,0){Der Abstand betraegt \the\dist};
\end{tikzpicture}

Ausserhalb der tikz-Umgebung ist der Abstand aber nicht mehr vefuegbar: \the\dist
\end{document}

Gruß
Elke