Hallo Texwelt, möchte ein Rohrsystem bauen. Zwecks 3D-Illusion Rohre schattieren. Mein Versuch war, mit top, bottom, middle color zu arbeiten. Aber wie bei einem Bogen? Gibt es eine Lösung für Nicht-Mathematiker oder hat ein Mathematiker eine Berechnung für die Aussenschattierung eines gebogenen Rohres? Grüße HJ

Open in Online-Editor
\documentclass[tikz]{standalone}

\begin{document}

\tikzset{
   pics/.cd,
   % tubeh
   tubeh/.style={
      code={
         \draw[top color=green, bottom color=green, middle color=white] (0,0)  rectangle +(2,1);
      }%end code   
   }%end style
}%end tikzset
\tikzset{
   pics/.cd,
   % tubev
   tubev/.style={
      code={
         \draw[left color=green, right color=green, middle color=white] (0,0)  rectangle +(1,2);
      }%end code   
   }%end style
}%end tikzset
\tikzset{
   pics/.cd,
   % tubearc
   tubearc/.style={
      code={
         % means 1cm in direction 0 degree
         \draw[top color=green, bottom color=green, middle color=white] (0:1cm) -- (0:2cm) 
         % draw arc: start angle, end angle, radius
         arc (0:90:2cm) -- (90:1cm) 
         arc (90:0:1cm) -- cycle;
      }%end code   
   }%end style
}%end tikzset

\begin{tikzpicture}%
  \draw[step=1, help lines](-2,-2) grid (5,2);
  \foreach \x in {-2,...,5}
     \draw (\x cm,1pt) -- (\x cm,-1pt) node[anchor=north] {$\x$};
  \foreach \y in {-2,...,2}
     \draw (1pt,\y cm) -- (-1pt,\y cm) node[anchor=east] {$\y$};

  \path (-2,1)  pic {tubeh}
        (0.0,0.0)  pic {tubearc}
        (1,-2) pic {tubev};
\end{tikzpicture}

\end{document}

Rohr

gefragt 08 Jan '16, 15:53

gizeh's gravatar image

gizeh
5111
Akzeptiert-Rate: 0%

bearbeitet 09 Jan '16, 14:48

cgnieder's gravatar image

cgnieder
20.8k193463

Idee: was rund aussieht ist im Polarkoordinatensystem gerade - dort schattieren (wenn es geht). Weitere, vmtl. besser ;-) Idee: normal linear schattieren, doch dann eine Koordinatentransformation anwenden, die das ursprünglich gerade Rohrstück auf so ein Eckstück "biegt", und damit auch die Schattierung.

(08 Jan '16, 18:50) stefan ♦♦

@stefan: Danke für deine Antwort. normal linear schattieren. Code-Schnipsel wäre super. Ein Beispiel wäre super, denn Koordinatentransformation kann ich noch nicht.

(08 Jan '16, 19:01) gizeh

@stefan Leider sind die Schattierungen immun gegen normale, d.h. nicht rabiate, Koordinatentransformationen. Zu diesen zählen auch die nichtlinearen. Allerdings kannst Du Schattierungen durch canvas transformations (Segeltuchtransformationen klingt bescheuert;-) transformieren, jedoch sind mir bisher noch keine nichtlinearen canvas Transformationen über den Weg gelaufen. Wenn man die aber durch stückweise lineare Transformationen approximiert, geht Dein Plan (den ich erst jetzt lese) genau auf.

(30 Jun '18, 04:21) Community

Hier ist ein Vorschlag.

Öffne in Overleaf
\documentclass[tikz]{standalone}

\begin{document}

\tikzset{
   pics/.cd,
   % tubeh
   tubeh/.style={
      code={
         \draw[top color=green, bottom color=green, middle color=white] (0,0)  rectangle +(2,1);
      }%end code   
   }%end style
}%end tikzset
\tikzset{
   pics/.cd,
   % tubev
   tubev/.style={
      code={
         \draw[left color=green, right color=green, middle color=white] (0,0)  rectangle +(1,2);
      }%end code   
   }%end style
}%end tikzset
\tikzset{
   pics/.cd,
   % tubearc
   tubearc/.style={
      code={
         % means 1cm in direction 0 degree
         \draw[clip] (0:1cm) -- (0:2cm) 
         % draw arc: start angle, end angle, radius
         arc (0:90:2cm) -- (90:1cm) 
         arc (90:0:1cm) -- cycle;
         \foreach \X in {0,5,...,85} % <- Du kannst die Stufen hier feiner waehlen
         {\shade[left color=green, right color=green, middle
         color=white,transform canvas={rotate=\X}] 
         (0:1cm) -- (0:2cm) 
         arc (0:{5}:2cm) -- ({5}:1cm) 
         arc ({5}:{0}:1cm) -- cycle;}
      }%end code   
   }%end style
}%end tikzset

\begin{tikzpicture}%
  \draw[step=1, help lines](-2,-2) grid (5,2);
  \foreach \x in {-2,...,5}
     \draw (\x cm,1pt) -- (\x cm,-1pt) node[anchor=north] {$\x$};
  \foreach \y in {-2,...,2}
     \draw (1pt,\y cm) -- (-1pt,\y cm) node[anchor=east] {$\y$};

  \path (-2,1)  pic {tubeh}
        (0.0,0.0)  pic {tubearc}
        (1,-2) pic {tubev};
\end{tikzpicture}

\end{document}

alt text

Wenn Du super genau reinzoomen magst, kannst Du die Stufen feiner machen, die Stelle ist im Code markiert.

Permanenter link

beantwortet 29 Jun '18, 05:32

Community's gravatar image

Community
11
Akzeptiert-Rate: 56%

1

@Murmeltier Du hast ja bereits eine Vielzahl toller TikZ-Beispiele geschaffen. Hast Du evtl. Lust, die schönsten und lehrreichen Beispiele auf TeXample.net in die Galerie zu stellen? (Ist etwas Arbeit: Auswahl, Tags zuordnen, etwas kommentieren. Technisch in die Galerie einpflegen würde ich tun.) Bei Interesse schick mir gern eine mail an stefan@latex.org

(27 Aug '18, 15:43) stefan ♦♦
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×688
×1

gestellte Frage: 08 Jan '16, 15:53

Frage wurde gesehen: 3,418 Mal

zuletzt geändert: 27 Aug '18, 15:43