我正在尝试使用创建一个简单的球面象限网格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}
编辑:
经过进一步研究,似乎尝试绕 x 轴旋转实际上会绕 z 轴旋转,如该图所示。将 放置\rot
在 x 或 z 位置具有相同的效果。
答案1
实际上,这不是一个错误。旋转不是 xyz 旋转,而是 zyz 旋转。要绕 x 轴旋转 90 度,您可以绕 z 轴旋转 90 度,然后绕旋转的 y 轴旋转 90 度,最后绕旋转的 z 轴旋转 270 度。这些旋转称为欧拉旋转。您可以在 Wikipedia 或 tikz-3dplot 文档上阅读有关欧拉旋转的更多信息。
答案2
这似乎确实是一个错误,绕轴的旋转y
按z
预期工作,但绕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}