Warum rotieren Objekte in Tikz3D nicht?

Warum rotieren Objekte in Tikz3D nicht?

Ich verwende tikz-3dplotund erwarte rectangle, dass gridund ä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 rectanglein 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 rectangleOperator wird von Ti verarbeitetkZ durch die folgenden Zeilen ( tikz.code.texZeilen 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.

verwandte Informationen