PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : tikz, flowchart, Pfeil "um die Ecke" mit Schrift



Barny.G
20-01-2012, 15:47
Hallo liebe Gemeinde,

ein kleines Prob bei dem ich mal wieder ein klein wenig Unterstützung brauche. Ich habe hier einen flowchart:

\documentclass{article}
\usepackage{geometry}
\geometry{a3paper,left=35mm,right=28mm, top=25mm, bottom=27mm}

\usepackage[latin1]{inputenc}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows,positioning}

\begin{document}
\pagestyle{empty}


% Define block styles
\tikzstyle{decision} = [diamond, draw, fill=red!10, text width=4.5em, text badly centered, node distance=15ex, inner sep=0pt]
%\tikzstyle{block} = [rectangle, draw, fill=blue!20, text width=5em, text centered, rounded corners, minimum height=4em]
\tikzstyle{block} = [rectangle, draw, fill=blue!20, node distance=15ex, text centered, rounded corners, text width=25ex, minimum height=5ex]
\tikzstyle{line} = [draw, -latex]
%\tikzstyle{cloud} = [draw, ellipse,fill=green!20, node distance=3cm, minimum height=2em]
\tikzstyle{cloud} = [draw, rectangle,fill=green!20, node distance=25ex, minimum height=5ex, rounded corners]

\begin{tikzpicture}[node distance = 8ex, auto]
% Place nodes
\node [block] (init) {Modellinitialisierung mit $\widehat{\boldsymbol{x}}, \rho$};
\node [block, below of=init, node distance=10ex] (Gx) {$\begin{matrix} \boldsymbol{Gx}=\boldsymbol{d} - f\left(\widehat{\boldsymbol{x}}\right) \\
\boldsymbol{J} = \frac{\partial f}{\partial x_i}
\end{matrix}$};
\node [block, below of=Gx] (Lambda) {Berechnung des Langrange-Faktors $\lambda$ mit dem Hebden-Verfahren};

\node[left=15ex of Lambda] (dummy) {};

\node [cloud, above of=dummy, node distance=4ex] (Rho) {$\rho, \boldsymbol{J}$};
\node [cloud, left of=dummy] (Hebden) {$\begin{matrix} \text{Hebden-Verfahren} \\
\text{ggf. Anpassung $\rho$} \\
\text{Berechnung des } \lambda
\end{matrix}$};
\node [cloud, below of=dummy, node distance=4ex] (LambdaRho) {$\lambda$ und ggf. $\rho$};

\node [block, below of=Lambda] (dx) {Berechnung des Modellupdates $d\widehat{\boldsymbol{x}} = f\left(\boldsymbol{J},\lambda,\boldsymbol{I},\bold symbol{Gx}\right)$};
\node [block, below of=dx] (AGK) {$\mu$-Test mit dem Armijo-Goldstein-Kriterium $f\left(d\widehat{\boldsymbol{x}}, \boldsymbol{J}, \boldsymbol{Gx}\right)$};

\node [decision, below of=AGK] (decide) {$\mu < 0.25$};
\node [block, below of=decide] (update) {$\widehat{\boldsymbol{x}}_{\text{neu}} = \widehat{\boldsymbol{x}} + d\widehat{\boldsymbol{x}}$};
\node [block, right of=decide, node distance=20ex, text width=8ex] (RhoUpdate) {$\rho = \frac{\rho}{2}$};
%\node [right of=Lambda, node distance=20ex] (dummy2) {};

\node [decision, below of=update, node distance=20ex, text width=20ex] (Abbruchbed) {Abbruchbedingung erreicht?};
\node [cloud, below of=Abbruchbed, node distance=20ex] (Ende) {End};

\node [decision, right of=Abbruchbed, node distance=35ex] (MuGross) {$\mu > 0.75$};
\node [block, right of=RhoUpdate, node distance=15ex, text width=8ex] (RhoUpdate2) {$\rho = 2 \rho$};
\node [block, right of=RhoUpdate2, node distance=15ex, text width=8ex] (RhoUpdate3) {$\rho = \rho$};

% Draw edges
\path [line,dashed] (init) -- (Gx);
\path [line,dashed] (Gx) -- (Lambda);
\path [line,dashed] (Lambda) -- (Rho);
\path [line,dashed] (Rho) -- (Hebden);
\path [line,dashed] (Hebden) -- (LambdaRho);
\path [line,dashed] (LambdaRho) -- (Lambda);
\path [line,dashed] (Lambda) -- (dx);
\path [line,dashed] (dx) -- (AGK);
\path [line,dashed] (AGK) -- (decide);
\path [line,dashed] (decide) -- node {nein} (update);
\path [line,dashed] (decide) -- node {ja} (RhoUpdate);
\path [line,dashed] (RhoUpdate) |- (Lambda);
\path [line,dashed] (update) -- (Abbruchbed);
\path [line,dashed] (Abbruchbed) -- node {ja} (Ende);
\path [line,dashed] (Abbruchbed) -- node {nein} (MuGross);
\path [line,dashed] (MuGross) -- node {ja} (RhoUpdate2);
\path [line,dashed] (RhoUpdate2) |- (Lambda);
\path [line,dashed] (MuGross) -|node[midway]{nein} (RhoUpdate3);
\path [line,dashed] (RhoUpdate3) |- (Lambda);


\end{tikzpicture}

\end{document}
der noch nicht ganz fertig ist. Leider bekomme ich ganz rechts einfach das "nein" nicht an die Linie. Außerdem wäre ich gern das sinnlose Kästchen "rho=rho" los. Das habe ich mir nur als Krücke mit hingebaut, damit meine Pfeile überhaupt irgendwohin zeigen... :confused:

Als zweites Problem wäre dann noch dieser unschön große Rhombus(?) mit "Abbruchbedingung erreicht?". Kann man den irgendwie nicht ganz so raumfüllend gestalten? :)

Viele Grüße

Thomas

mechanicus
20-01-2012, 16:08
Hi,

einfach:


\node [decision, below of=update, node distance=20ex, text width=10ex] (Abbruchbed) {Abbruch\-bedingung erreicht?};


\draw[dashed] (MuGross) -- ($(MuGross)+(2.25,0)$) |- (Lambda);

Marco

Barny.G
20-01-2012, 16:20
Hallo mechanicus,

ich habe mal Deinen code in meinen eingebaut und nun geht der Pfeil diagonal über's Blatt und macht einen Knick an der "falschen" Stelle.

Wie kann ich das noch beheben?

--> die Verkleinerung des Rhombus ist sehr hübsch! :D

Thomas

mechanicus
20-01-2012, 17:15
ich habe mal Deinen code in meinen eingebaut und nun geht der Pfeil diagonal über's Blatt und macht einen Knick an der "falschen" Stelle.

Bei mir nicht. Ich nutze die cvs-Version von tikz.

Gruß
Marco

Barny.G
20-01-2012, 19:06
Hallo mechanicus,

ich habe den Fehler bei mir gefunden. Ich musste noch die Bibliothek

\usetikzlibrary{calc}
nachladen. Jetzt geht schön. :D

DANKE!

Thomas