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 10 Dez '15, 00:31

Fledermaus_man's gravatar image

Fledermaus_man
3312
Akzeptiert-Rate: 0%

bearbeitet 10 Dez '15, 20:07

cis's gravatar image

cis
9.5k74452491

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, 20: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, 13:23

esdd's gravatar image

esdd
17.7k254256
Akzeptiert-Rate: 62%

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, 17: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, 18:32) saputello
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:

×5
×2
×1

gestellte Frage: 10 Dez '15, 00:31

Frage wurde gesehen: 7,874 Mal

zuletzt geändert: 11 Dez '15, 18:33