TikZ-3dplot 和坐标旋转

TikZ-3dplot 和坐标旋转

在里面tikz-3dplot 文档(第 15 页)\tdplotsetmaincoords{a}{b}建议旋转坐标系。但显然它只实现了围绕xz轴的旋转。

x如何实现一个指向上方、z指向右侧并且y几乎指向“页面之外”的坐标系统?(y需要绕轴旋转)。

a尽管尝试了和的几个值b,但我没有得到这个。到目前为止,我的代码(部分来自非常有用的答案):

\documentclass[border=2mm,tikz]{standalone}
\usepackage{tikz}
\usepackage{tikz-3dplot}

\begin{document}

\tdplotsetmaincoords{70}{70}
\begin{tikzpicture}[tdplot_main_coords,font=\sffamily]

\draw[-latex] (-7.5,0,0) -- (7.5,0,0)  node[above right]  {$x$};
\draw[-latex] (0,-7.5,0) -- (0,7.5,0)  node[below] {$y$};
\draw[-latex] (0,0,-7.5) -- (0,0,7.5)  node[above left]  {$z$};

\draw[fill=gray,opacity=0.4] (0,-7.5,7.5) -- (0,7.5,7.5) -- (0,7.5,-7.5) -- (0,-7.5,-7.5) -- cycle;
\draw[fill=gray,opacity=0.2] (-7.5,0,-7.5) -- (-7.5,0,7.5) -- (7.5,0,7.5) -- (7.5,0,-7.5) -- cycle;

\end{tikzpicture}

\end{document}

enter image description here

z轴应该替换当前y轴,该x轴应该替换当前z轴,该y轴应该替换当前x轴。

作为额外的尝试,我\tdplotsetrotatedcoords{0}{40}{0}在最后两秒之前尝试过draw,但根本没有效果。

答案1

最简单的方法是重新标记轴,使 x 指向上方,依此类推。但这可能不是您想要的。因此,正确的方法是使用旋转坐标。

\documentclass[border=2mm,tikz]{standalone}
\usepackage{tikz-3dplot}

\begin{document}

\tdplotsetmaincoords{70}{70}
\begin{tikzpicture}[tdplot_main_coords,font=\sffamily]
\tdplotsetrotatedcoords{-90}{-90}{0}
\begin{scope}[tdplot_rotated_coords]
\draw[-latex] (-7.5,0,0) -- (7.5,0,0)  node[above right]  {$x$};
\draw[-latex] (0,-7.5,0) -- (0,7.5,0)  node[below] {$y$};
\draw[-latex] (0,0,-7.5) -- (0,0,7.5)  node[above left]  {$z$};
\end{scope}
\draw[fill=gray,opacity=0.4] (0,-7.5,7.5) -- (0,7.5,7.5) -- (0,7.5,-7.5) -- (0,-7.5,-7.5) -- cycle;
\draw[fill=gray,opacity=0.2] (-7.5,0,-7.5) -- (-7.5,0,7.5) -- (7.5,0,7.5) -- (7.5,0,-7.5) -- cycle;
\end{tikzpicture}
\end{document}

enter image description here

首先,是的,乍一看,\tdplotsetmaincoords只需要两个参数很奇怪。如果你再多想一想,你就会意识到,为了描述 3D 中的旋转,你只需要两个角度。但我同意你的观点,调整中的角度\tdplotsetmaincoords并不能让你访问所有可能的旋转。这就是我建议使用的原因\tdplotsetrotatedcoords。请注意,存在歧义,从手册中不清楚这些旋转的应用顺序。(更具体地说,先绕 x 轴旋转然后绕 y 轴旋转与先绕 y 轴旋转然后绕 x 轴旋转产生的结果不同。也就是说,问题在于 SO(3) 是非阿贝尔的。)使用这些技巧,我到目前为止能够获得任何所需的旋转。

答案2

我相信结合\tdplotsetmaincoords{100}{10}此选项rotate=269.7可以实现您所要求的功能!

\documentclass[border=2mm,tikz]{standalone}
\usepackage{tikz}
\usepackage{tikz-3dplot}

\begin{document}

\tdplotsetmaincoords{80}{175}
\begin{tikzpicture}[tdplot_main_coords,font=\sffamily,rotate=269.2]

\draw[-latex] (-7.5,0,0) -- (7.5,0,0)  node[above right]  {$x$};
\draw[-latex] (0,-7.5,0) -- (0,7.5,0)  node[below] {$y$};
\draw[-latex] (0,0,-7.5) -- (0,0,7.5)  node[above left]  {$z$};

\draw[fill=gray,opacity=0.4] (0,-7.5,7.5) -- (0,7.5,7.5) -- (0,7.5,-7.5) -- (0,-7.5,-7.5) -- cycle;
\draw[fill=gray,opacity=0.2] (-7.5,0,-7.5) -- (-7.5,0,7.5) -- (7.5,0,7.5) -- (7.5,0,-7.5) -- cycle;

\end{tikzpicture}

\end{document}

enter image description here

相关内容