tikz-3dplot 中的自定义轴,\tdplotdefinepoints 未按预期工作

tikz-3dplot 中的自定义轴,\tdplotdefinepoints 未按预期工作

我用来tikz-3dplot在 3D 空间中绘制矢量和弧线。在下面的例子中,我绘制了两张图片。两张图片中绘制矢量和弧线的代码相同。但是,图片 2 有自定义轴:

\documentclass[tikz,border=10pt]{standalone}
\usepackage{tikz-3dplot}

\begin{document}
\tdplotsetmaincoords{60}{120}

% picture 1
\begin{tikzpicture}[tdplot_main_coords]

  \draw[thick,->] (0,0,0) -- ( 1,0,0) node[anchor=north east]{$x$};
  \draw[thick,->] (0,0,0) -- ( 0,1,0) node[anchor=west]{$y$};
  \draw[thick,->] (0,0,0) -- ( 0,0,1) node[anchor=south]{$z$};  

  \draw[red,->] (0,0,0) -- (.5,.5,0);
  \draw[red,dotted] (.5,0,0) -- (.5,.5,0) -- (0,.5,0);

  \tdplotdefinepoints(0,0,0)(1,0,0)(0,1,0)
  \tdplotdrawpolytopearc[blue]{.7}{anchor=north,blue}{$\phi$}
\end{tikzpicture}

% picture 2
\begin{tikzpicture}[tdplot_main_coords,
  z={(\raarot cm, \rbarot cm)},
  y={(\rabrot cm, \rbbrot cm)},
  x={(\racrot, \rbcrot cm)}]

  \draw[thick,->] (0,0,0) -- ( 1,0,0) node[anchor=south]{$x$};
  \draw[thick,->] (0,0,0) -- ( 0,1,0) node[anchor=west]{$y$};
  \draw[thick,->] (0,0,0) -- ( 0,0,1) node[anchor=north east]{$z$};  

  \draw[red,->] (0,0,0) -- (.5,.5,0);
  \draw[red,dotted] (.5,0,0) -- (.5,.5,0) -- (0,.5,0);

  \tdplotdefinepoints(0,0,0)(1,0,0)(0,1,0)
  \tdplotdrawpolytopearc[blue]{.7}{anchor=north,blue}{$\phi$}
\end{tikzpicture}
\end{document}

图片1

在此处输入图片描述

图片2

在此处输入图片描述

在这两张图片中,红色向量位于 xy 平面中,正如预期的那样。问题在于第二张图片中的蓝色圆弧,我原本期望它也位于 xy 平面中。这里出了什么问题?我的期望错了吗?

答案1

正如我在评论中所说:如果你在 Ti 中指定x=...y=...z=...自己绘制 Z 层,绘制命令如下

\draw[thick,->] (0,0,0) -- ( 1,0,0) node[anchor=south]{$x$};

适应新的坐标,因为像(0,0,0)和这样的点(1,0,0)由 Ti 评估直接 Z。

对于 tikz-3dplot 的独有功能,例如\tdplotsetrotatedcoords,新坐标是根据变量\raarot及其朋友计算的。然而,tikz-3dplot 从未知道\raarot现在用于 z 单位向量的水平分量。因此,tikz-3dplot 将默认为\raarotx 单位向量的水平,最终给出不理想的结果。

为了克服这一点,只需记住用户应该只修改\raarot及其朋友,让 tikz-3dplot 完成剩余的工作,包括应用x=...。 在你的情况下,你应该按如下方式开始你的第二张图片:

% picture 2

\let\raarotold\raarot \let\rbarotold\rbarot
\let\rabrotold\rabrot \let\rbbrotold\rbbrot
\let\racrotold\racrot \let\rbcrotold\rbcrot

\let\raarot\racrotold \let\rbarot\rbcrotold
\let\rabrot\rabrotold \let\rbbrot\rbbrotold
\let\racrot\raarotold \let\rbcrot\rbarotold

\begin{tikzpicture}[tdplot_main_coords]

这样就得到了想要的结果。(除了 的锚点\phi

相关内容