为什么 tikz3d 中的物体不旋转?

为什么 tikz3d 中的物体不旋转?

我使用tikz-3dplot并且期望rectanglegrid类似的对象与图形的其余部分一起旋转。但是,它们被绘制得好像是在 2D 中一样。如何强制rectangle在旋转坐标中绘制 ?

\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}

答案1

这是一个非常有趣的问题。

我们期望以下几行是等效的。但事实并非如此。

\draw[red](0,0)rectangle(1,1);
\draw[blue](0,0)--(1,0)--(1,1)--(0,1)--cycle;

rectangle符由 Ti 处理Z 按照以下行(tikz.code.tex第 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}}%

在这个级别,PGF 无法识别图形的 3D 结构,因此矩形以 2D 方式绘制在画布上。



讽刺的是,如果你\usetikzlibrary{3d}

\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);

然后三个圆就画对了,三个矩形中有两个也画对了。错误的那个是在 xy 平面上的那个。

这是修复绘制三维矩形

相关内容