我用来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 将默认为\raarot
x 单位向量的水平,最终给出不理想的结果。
为了克服这一点,只需记住用户应该只修改\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
)