Anzeige:
Ergebnis 1 bis 2 von 2

Thema: tikz: Fläche füllen mit nodes?!

  1. #1
    Registrierter Benutzer Avatar von Barny.G
    Registriert seit
    11.09.2008
    Beiträge
    120

    tikz: Fläche füllen mit nodes?!

    Hallo und moin moin,

    nach einiger Bastelei und immer noch keiner Lösung versuche ich mal das Problem ein wenig breitzutreten. Vielleicht wird es dadurch dünner...

    Ich habe mir eine schöne Grafik erstellt und alles möglichst variabel gehalten. Nun möchte ich am unteren Ende gern eine Fläche füllen, deren Ecken durch "nodes" gekennzeichnet sind.

    Was mir schon aufgefallen ist, die Fläche ist (an den Linien kann man es sehen) nicht geschlossen. Wahrscheinlich funktioniert es deswegen nicht. Allerdings habe ich noch keine Abhilfe gefunden...

    Gern möchte ich direkten Zahlenkontakt vermeiden und auch weiterhin nur mit Variablen arbeiten. Wie kann ich TIKZ dazu verleiten um die nodes nix mehr freizustellen, sondern die "echte" Koordinate unter dem jeweiligen Namen zu speichern?

    Hier mein kleines Beispiel:
    Code:
    \documentclass{scrreprt}
    \usepackage[ngerman]{babel}
    \usepackage[latin1]{inputenc}
    \usepackage{graphicx}
    \usepackage{float}
    %\usepackage{psfrag}
    %\usepackage{pstool}
    
    \usepackage{amssymb}
    \usepackage{amsmath}
    \usepackage{mathrsfs} 
    \usepackage{tikz}
    \usetikzlibrary{shapes,arrows,positioning,calc,fit,intersections}
    
    
    \begin{document}
    
    \begin{figure}
    \beginpgfgraphicnamed{Modell_der_Leitfaehigkeiten}
    \begin{center}
    \begin{tikzpicture}[scale=1]
      \newcommand{\ModBreite}{5}
      \newcommand{\CircRad}{2}
     %Schichtdicken
      \newcommand{\sda}{5}
      \newcommand{\sdb}{2}
      \newcommand{\sdc}{3}
      \newcommand{\sdd}{5}
     %Oberflaeche
      \coordinate[] (Ovl) at (0,0);  %\coordinate[label=left:$vl$]
      \coordinate[] (Ohl) at ($(Ovl)+(45:\ModBreite/2)$);
      \coordinate[] (Ovr) at ($(Ovl)+(0:\ModBreite)$);
      \coordinate[] (Ohr) at ($(Ovr)+(45:\ModBreite/2)$);
     %Oberfläche zeichnen
      \def \Obfl{(Ovl) -- (Ohl) -- (Ohr) -- (Ovr) -- cycle}
      \draw \Obfl;
      \fill[color=gray,fill opacity=0.2]  \Obfl;
     %Sender Tx
      \coordinate[label=left:$Tx$] (Tx) at ($(Ovl)+(\ModBreite/2,0)+(45:\ModBreite/4)$);
      \fill[red] (Tx) circle (\CircRad pt);
     %Empfänger Rx
      \coordinate[label=right:$Rx$] (Rx) at ($(Tx)+(\ModBreite/4,-\sda*0.8)$);
      \fill[orange] (Rx) circle (\CircRad pt);
     %erste Schicht
      \draw (Ovl) -- ++(-90:\sda) node[inner sep=0] (Ovlsda){};
      \draw (Ohl) -- ++(-90:\sda) node[inner sep=0] (Ohlsda){};
      \draw (Ovr) -- ++(-90:\sda) node[inner sep=0] (Ovrsda){};
      \draw (Ohr) -- ++(-90:\sda) node[inner sep=0] (Ohrsda){};
      \def \ObFlsda{(Ovlsda) -- (Ohlsda) -- (Ohrsda) -- (Ovrsda) -- (Ovlsda)}
      \draw[gray, dashed] \ObFlsda;
      \fill[color=green,fill opacity=0.1] \ObFlsda; %funktioniert nicht!!!!
      %Anschrieb
      \draw[latex-] ($(Ovr) + (0,-\sda/2) + (45:\ModBreite/4)$) --++ (-15:\ModBreite/5) node[right]{$\sigma_1$};
      \draw ($(Ohr)+(0,-\sda/2)$)  node[right]{$h_1$};
      
     %Strahlweg
      \draw [-latex,outer sep=2pt] (Tx) -- (Rx);
    
    \end{tikzpicture}
    \end{center}
    \endpgfgraphicnamed
    \end{figure}
    
    \end{document}
    Tut mir Leid, aber weniger geht nicht (bei mir)

    Wenn man schön auf eine untere Ecke zoomt, dann ist gut zu sehen, was ich meine...

    Viele Grüße

    Thomas
    ... mein Ball ist umgefallen

  2. #2
    Registrierter Benutzer Avatar von Barny.G
    Registriert seit
    11.09.2008
    Beiträge
    120
    ... ich habe eine Lösung gefunden, ob diese jedoch effektiv ist, sei dahin gestellt:
    Code:
     %erste Schicht
      \coordinate[] (Ovlsda) at ($(Ovl) + (-90:\sda)$);
      \coordinate[] (Ohlsda) at ($(Ohl) + (-90:\sda)$);
      \coordinate[] (Ovrsda) at ($(Ovr) + (-90:\sda)$);
      \coordinate[] (Ohrsda) at ($(Ohr) + (-90:\sda)$);
      \draw (Ovl) -- (Ovlsda);
      \draw (Ohl) -- (Ohlsda);
      \draw (Ovr) -- (Ovrsda);
      \draw (Ohr) -- (Ohrsda);
      \def \ObFlsda{(Ovlsda) -- (Ohlsda) -- (Ohrsda) -- (Ovrsda) -- (Ovlsda)}
      \draw[gray, dashed] \ObFlsda;
      \fill[color=green,fill opacity=0.1] \ObFlsda; %funktioniert nicht!!!!
    Somit werden zunächst die Koordinaten berechnet und in einem zweiten Schritt die Linien gezeichnet. Eigentlich wollte ich das in einem Schritt tun, aber ich kann's halt (noch) nicht...

    Hat jemand eine bessere Idee? Sehr gern wäre ich ein bisschen effektiver bei dem Ganzen hier

    Schöne Grüße

    Thomas
    ... mein Ball ist umgefallen

Lesezeichen

Berechtigungen

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