Hallo TeXwelt,
Ich beschäftige mich für meine Begriffe schon viel zu lange mit dieser Frage, die vielleicht auch ganz einfach zu lösen ist: Wie kann ich eine schattierte Fläche drehen? Und zwar so, dass sich die Schattierung "mitdreht".

Wenn ich in einem TikZ-Picture beispielsweise ein Rechteck zeichne, dann kann ich über Befehle wie top, right oder inner und über color= Farbverlauf und Farben explizit einstellen. Wenn ich nun aber das Rechteck drehe, dann beziehen sich diese Einstellungen immer noch auf das ursprüngliche Koordinatensystem. Andererseits, mit dem Befehl shading=axis fehlen mir Einstellmöglichkeiten; ich kann keine Farben mehr variieren.

Im TikZ/PGF Manual bin ich zwar fündig geworden, aber ich weiß nicht ob es nötig ist in die pgfpicture-Umgebung mit pgfdeclareverticalshading zu wechseln.

Schon mal vielen Dank!

Open in Online-Editor
\documentclass[12pt,a4paper]{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{backgrounds}

\begin{document}

\begin{tikzpicture}[framed]

\shadedraw[top color=black!20, bottom color=black!40, middle color=black!70]
(0,0) rectangle +(3,2);

\shadedraw[top color=black!20, bottom color=black!40, middle color=black!70, rotate=20]
(4,0) rectangle +(3,2);

\shadedraw[shading=axis, shading angle=10, rotate=10]
(8,0) rectangle +(3,2);

\end{tikzpicture}
\end{document}

gefragt 09 Dez '15, 18:31

Fledermaus_man's gravatar image

Fledermaus_man
332
Akzeptiert: 100%

bearbeitet 10 Dez '15, 14:07

cis's gravatar image

cis
5.4k860169

Es könnte etwas mit transform canvas und/oder shading angle zu tu haben, ich bekomme jedoch gerade keine perfekte Lösung damit hin.

(10 Dez '15, 14:07) cis

Wirklich schön ist es nicht, aber hier ist mal ein Vorschlag, bei dem das Rechteck zunächst in einer Box gespeichert und anschließend in einem Node an der gewünschten Stelle ausgegeben wird:

Open in Online-Editor
\documentclass[margin=5mm]{standalone}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\newbox\mybox
\newcommand{\tikzBox}[2][\mybox]{%
  \sbox#1{\pgfinterruptpicture#2\endpgfinterruptpicture}}

\begin{document}
\begin{tikzpicture}[framed]
\shadedraw[top color=orange!20, bottom color=purple!40, middle color=black!70]
  (0,0) rectangle +(3,2);

\tikzBox{%
  \tikz\shadedraw[top color=orange!20, bottom color=purple!40, middle color=black!70]
    (0,0) rectangle +(3,2);%
}
\path[rotate=20,transform shape]
  (4,0)node[inner sep=0pt,outer sep=0pt,anchor=south west]{\usebox\mybox};

\end{tikzpicture}
\end{document}

alt text


Alternativ könnte man das von @cis erwähnte transform canvas verwenden, allerdings wird die Koordinatentransformation außerhalb des transformierten Pfades oder des scopes wieder vergessen. Im folgenden Beispiel führt das dazu, dass die Bounding Box des Bildes zu klein ist und die Koordinate c nach dem Ende des scopes am nicht transformierten Punkt liegt.

Open in Online-Editor
\documentclass[margin=40mm]{standalone}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\newbox\mybox
\newcommand{\tikzBox}[2][\mybox]{%
  \sbox#1{\pgfinterruptpicture#2\endpgfinterruptpicture}}

\begin{document}
\begin{tikzpicture}[framed]
\shadedraw[top color=orange!20, bottom color=purple!40, middle color=black!70]
  (0,0) rectangle +(3,2);

\begin{scope}
  [transform canvas={rotate=20}]
  \shadedraw[top color=orange!20, bottom color=purple!40, middle color=black!70]
    (4,0) rectangle +(3,2)coordinate(c);
  \node[blue]at(c){X};
\end{scope}
\node[red]at(c){X};

\end{tikzpicture}
\end{document}

alt text

Permanenter link

beantwortet 11 Dez '15, 07:23

esdd's gravatar image

esdd
14.2k53251

Danke für die beiden Antworten.

Ich habe jetzt die transform canvas Variante genommen. Und über Erweiterung rotate around={-30:(1,0)} kann man noch einen Drehpunkt festlegen.

(11 Dez '15, 11:51) Fledermaus_man

@Fledermaus_man: Ich habe Deine "Antwort" in einen Kommentar umgewandelt. Hier sind Antworten stets "echte" Antworten, keine Gespräche oder Rückfragen oder Zusatzinfos, sondern Lösungen. Ungewohnt und anders als in Webforen, doch innovativ und nutzbarer. Bemerkungen gern wie hier als Kommentare. Inline-Code geht übrigens nicht mit *Code*, sondern mit `Code`.

(11 Dez '15, 12:32) saputello
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×5
×1
×1

Frage gestellt: 09 Dez '15, 18:31

Frage wurde angeschaut: 1,226 Mal

Zuletzt aktualisiert: 11 Dez '15, 12:33