
Ich verwende tikz-3dplot
und erwarte rectangle
, dass grid
und ähnliche Objekte zusammen mit dem Rest der Figur gedreht werden. Sie werden jedoch so gezeichnet, als wären sie in 2D. Wie erzwinge ich, dass ein rectangle
in den gedrehten Koordinaten gezeichnet wird?
\documentclass{article}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{patterns, arrows, matrix, positioning, decorations.markings, arrows.meta, decorations.pathreplacing}
\usepackage{tikz-3dplot}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}
\begin{document}
\tdplotsetmaincoords{70}{110}
\def\mycolor{blue}
\begin{tikzpicture}[scale=1, tdplot_main_coords, axis/.style={->,\mycolor,thick}]
\def\latnum{8}
\def\lonnum{8}
\draw[axis] (0,0,0) -- (\latnum+1,0,0) node[anchor=north east]{\huge $lat$};
\draw[axis] (0,0,0) -- (0,\lonnum+1,0) node[anchor=north west]{\huge $lon$};
\fill [orange] (\latnum-2,\lonnum-2,0) rectangle (2,2,0);
\end{tikzpicture}
\end{document}
Antwort1
Das ist eine sehr interessante Frage.
Wir erwarten, dass die folgenden Zeilen gleichwertig sind. Das sind sie aber nicht.
\draw[red](0,0)rectangle(1,1);
\draw[blue](0,0)--(1,0)--(1,1)--(0,1)--cycle;
Der rectangle
Operator wird von Ti verarbeitetkZ durch die folgenden Zeilen ( tikz.code.tex
Zeilen 3140-3148
\pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@ya}}% \tikz@path@lineto{\pgfqpoint{\pgf@xa}{\tikz@lasty}}% \tikz@path@lineto{\pgfqpoint{\tikz@lastx}{\tikz@lasty}}% \tikz@path@lineto{\pgfqpoint{\tikz@lastx}{\pgf@ya}}% \pgfpathclose% \pgfpathmoveto{\pgfqpoint{\tikz@lastx}{\tikz@lasty}}%
Auf dieser Ebene erkennt PGF die 3D-Struktur der Grafik nicht, daher werden die Rechtecke auf der Leinwand im 2D-Format gezeichnet.
Und hier ist etwas wirklich Ironisches: Wenn Sie \usetikzlibrary{3d}
und schreiben
\draw[canvas is xy plane at z=0](0,0)rectangle(1,1)circle(1);
\draw[canvas is yz plane at x=0](0,0)rectangle(1,1)circle(1);
\draw[canvas is zx plane at y=0](0,0)rectangle(1,1)circle(1);
Dann sind drei Kreise und zwei von drei Rechtecken richtig gezeichnet. Das falsche Rechteck liegt auf der xy-Ebene.
Dies ist behoben in3D-Rechteck zeichnen.