Seite 1 von 1

Funktionsstruktur nachbauen

Verfasst: Mi 12. Okt 2016, 11:57
von kannstmasehn
Hallo,

ich möchte das angehängte Funktionsdiagramm ungefähr nachbauen. Bisher bin ich so weit gekommen:
\documentclass[tikz,14pt,border=10pt]{standalone}
\usetikzlibrary{shapes,arrows}

\begin{document}
\tikzset{%
    block/.style    = {draw, rectangle, minimum height = 3em,
        minimum width = 3em},
    gain/.style     = {draw, isosceles triangle, minimum height = 3em,
        isosceles triangle apex angle=60},
    sum/.style n args = {4}{draw, circle, node distance = 2cm, minimum size=5mm, alias=sum,
    },
}

    \begin{tikzpicture}[auto, node distance=2cm, >=triangle 45]

	\node [](stoff) {Stoff};
	\node [right of = stoff,sum] (11) {St};
	\node [right of = 11,gain] (12) {St};
	\node [right of = 12,block] (13) {St};
	\node [right of = 13,sum] (14) {St};
	
	\node [below of = stoff](energie) {Energie};
	\node [right of = energie,sum] (21) {E};
	\node [right of = 21,gain] (22) {E};
	\node [right of = 22,gain] (23) {E};
	\node [right of = 23,block] (24) {E};
	
	\node [below of = energie](information) {Information};
	\node [right of = information,sum] (31) {I};	


	\draw[->](11) -- node {} (12);
	\draw[->](12) -- node {} (13);
	\draw[->](13) -- node {} (14);

	\draw[->](21) -- node {} (22);
	\draw[->](22) -- node {} (23);
	\draw[->](23) -- node {} (24);
	
	\draw[->](31) -- node {} (22);
	\draw[->](24) -- node {} (12);
 
\end{tikzpicture}
\end{document}

Problematisch sind noch:

1) die Pfeile, die von einer Zeile zur anderen wechseln, diese sollen an definierten Stellen eines Rechteckes, Kreises oder Dreieckes beginnen bzw. aufhören
2) die Linien der Pfeile sollen nicht direkt zum Endpunkt gehen, sondern wie in der Struktur vorgegeben über Ecken
3) Schön wäre auch eine Ausrichtung der Blöcke z.B. nach einem Dreieck

Wie kann ich diese Punkte am einfachsten realisieren?

Vielen Dank im Voraus!

Viele Grüße

Verfasst: Do 13. Okt 2016, 20:19
von Bartman
Bild

Mein Ansatz zur Erfüllung Deines zweiten Wunsches mag nicht elegant sein, aber bringt Dich eventuell Deinem Ziel etwas näher.
\documentclass[tikz,border=10pt]{standalone}

\usetikzlibrary{shapes,arrows,positioning}

\tikzset{font=\sffamily}

\begin{document}
\begin{tikzpicture}[
    auto, 
    node distance=2cm, 
    >=triangle 45,
    block/.style = {
        draw, 
        rectangle, 
        minimum height = 3em,
        minimum width = 3em
    },
    gain/.style = {
        draw, 
        isosceles triangle, 
        minimum height = 3em,
        isosceles triangle apex angle=60
    },
    sum/.style n args = {4}{
        draw, 
        circle, 
        node distance = 2cm, 
        minimum size=5mm, 
        alias=sum
    },
    leftlabel/.style = {
        text width = 5mm,
        align=left
    }
]

\node [leftlabel] (stoff) {Stoff};
\node [right = of stoff,sum] (11) {St};
\node [right = of 11,gain, yshift=-2mm] (12) {St};
\node [right = of 12,block] (13) {St};
\node [right = of 13,sum] (14) {St};
   
\node [below = of stoff, leftlabel](energie) {Energie};
\node [right = of energie,sum] (21) {E};
\node [right = of 21,gain, yshift=-2mm] (22) {E};
\node [right = of 22,gain] (23) {E};
\node [right = of 23,block] (24) {E};
   
\node [below = of energie, leftlabel](information) {Information};
\node [right = of information,sum] (31) {I};   


\draw[->](11.east) |- ([yshift=15mm]12);
\draw[->](12) -- (13);
\draw[->](13) -- (14);

\draw[->](21.east) |- ([yshift=15mm]22);
\draw[->](22) -- (23);
\draw[->](23) -- (24);
   
\draw[->](31.east) -- ++ (1.5,0) |- ([yshift=-.8cm]22);
\draw[->](24.east) -- ++ (.5,0) -- ++ (0,1.5) -- ++ (-8.3,0) |- ([yshift=-3mm]12.west);
\end{tikzpicture}
\end{document}

Verfasst: Fr 14. Okt 2016, 22:53
von kannstmasehn
Schaut super aus! Vielen vielen Dank und ein schönes Wochenende!