tikz-3dplot绕x轴旋转

tikz-3dplot绕x轴旋转

我正在尝试使用创建一个简单的球面象限网格tikz-3dplot包。经向网格线看起来不错,但当我尝试创建纬线时,我得到了非常奇怪的结果,我无法理解。我原本期望看到一系列围绕 x 轴旋转的纬度弧(因此它们与纬线不太一样)。相反,我尝试围绕 x 轴旋转似乎是围绕所有三个轴旋转。我不确定我做错了什么。

\documentclass{article}
\usepackage{tikz}
\usepackage{tikz-3dplot}

\begin{document}
\tdplotsetmaincoords{60}{155}
\usetikzlibrary{3d}

\begin{tikzpicture}[scale=5,tdplot_main_coords]
\tikzstyle{grid}=[thin,color=red,tdplot_rotated_coords]

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

\foreach \rot in {0, 30, 60, 90} {
    \tdplotsetrotatedcoords{\rot}{0}{0};
    \tdplotdrawarc[grid]{(0,0,0)}{1}{0}{180}{}{};
}

\foreach \rot in {-90, -60, -30, 0, 30, 60, 90} {
    \tdplotsetrotatedcoords{\rot}{90}{0};
    \tdplotdrawarc[grid]{(0,0,0)}{1}{90}{180}{}{};
}

\end{tikzpicture}
\end{document}

QTikz 中显示的结果

编辑:

经过进一步研究,似乎尝试绕 x 轴旋转实际上会绕 z 轴旋转,如该图所示。将 放置\rot在 x 或 z 位置具有相同的效果。

仅包含 x 旋转和缩短弧的图像。

答案1

实际上,这不是一个错误。旋转不是 xyz 旋转,而是 zyz 旋转。要绕 x 轴旋转 90 度,您可以绕 z 轴旋转 90 度,然后绕旋转的 y 轴旋转 90 度,最后绕旋转的 z 轴旋转 270 度。这些旋转称为欧拉旋转。您可以在 Wikipedia 或 tikz-3dplot 文档上阅读有关欧拉旋转的更多信息。

答案2

这似乎确实是一个错误,绕轴的旋转yz预期工作,但绕x轴的旋转似乎也是绕轴旋转z。所以我认为你最好提交一个错误报告。如果你等不及修复它,你可以使用这个慢得多的TikZ版本,它只使用一点测角并通过绘制 180 个线段来近似圆弧:

代码

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

\begin{document}

\tdplotsetmaincoords{60}{155}
\usetikzlibrary{3d}
\begin{tikzpicture}[scale=5,tdplot_main_coords]
\tikzstyle{grid}=[thin,color=red,tdplot_rotated_coords]
    \foreach \a in {0,1,...,9}
    {   \draw (1,0,0)
        \foreach \b in  {1,...,180}
        { -- ({cos(\b)},{sin(\b)*cos(10*\a)},{sin(\b)*sin(10*\a)})
        }
        ;
    }
    \foreach \rot in {-90,-80,...,90} {
    \tdplotsetrotatedcoords{\rot}{90}{0};
    \tdplotdrawarc[grid]{(0,0,0)}{1}{90}{180}{}{};
    }
    \draw[thick,->] (-1,0,0) -- (1,0,0) node[anchor=north east]{$x$};
    \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
    \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
\end{tikzpicture}

\end{document}

输出在此处输入图片描述

答案3

使用 PSTricks 的解决方案。运行以下命令xelatex

\documentclass{article}
\usepackage{pst-3dplot}
\begin{document}

\begin{pspicture}(-5,0)(15,10)
\psset{unit=3cm,Alpha=45, Beta=15,linecolor=blue!60,linewidth=1.5pt}
\parametricplotThreeD[xPlotpoints=500, yPlotpoints=10](0,180)(0,90){
    /r 1.0 def
    r t cos mul u sin mul 
    r t sin mul u sin mul 
    r u cos  mul }
\parametricplotThreeD[xPlotpoints=500, yPlotpoints=8](0,90)(0,180){
    /r 1.0 def
    r u cos mul t sin mul 
    r u sin mul t sin mul 
    r t cos  mul }
\pstThreeDCoor[xMin=-2,xMax=2.0,yMin=-.5,yMax=2.0, zMin=-.5,zMax=1.5,linecolor=black,linewidth=0.6pt]
\end{pspicture}
\end{document}

在此处输入图片描述

相关内容