3D 绘图 TikZ 中的奇怪问题:缺少零件和轴

3D 绘图 TikZ 中的奇怪问题:缺少零件和轴

在最新的 MikTeX 或 TexLive 中编译以下示例会导致奇怪的问题:看一下情节:

问题图片:缺失线段和轴

缺少一些部分,只画出了 z 轴。请尽力提供帮助。

\documentclass{standalone}
\usepackage{tikz,tikz-3dplot}
\begin{document}
\tdplotsetmaincoords{70}{10}
\begin{tikzpicture}[scale=5,line join=bevel,tdplot_main_coords,fill opacity=.15]
\pgfsetlinewidth{.2pt}
\tdplotsetpolarplotrange{30}{100}{0}{360}
\tdplotsphericalsurfaceplot[parametricfill]%
{18}%
{36}%
{1}%
{black}%
{\tdplotphi+\tdplottheta+\tdplotr}%
{\draw[color=black,thick,->] (0,0,0) -- (1.3,0,0) node[right]{\(x\)};}
{\draw[color=black,thick,->] (0,0,0) -- (0,3.3,0) node[above right]{\(y\)};}
{\draw[color=black,thick,->] (0,0,0) -- (0,0,1.3) node[above]{\(z\)};};
\end{tikzpicture}
\end{document}

有什么提示吗?提前致谢

答案1

与 PSTricks 相同...使用xelatex或加载包运行auto-pst-pdf

\documentclass{article}
\usepackage{pst-solides3d}

\begin{document}

\psset{unit=2.5}
\begin{pspicture}(-2,-2)(2,2)
\psset{viewpoint=20 20 20 rtp2xyz,
   Decran=20,lightsrc=viewpoint}
\psSolid[object=grille,base=-2 2 -2 2,action=draw,linecolor=red](0,0,0)
\axesIIID(2,2,1.5)(3,3,2)
\defFunction[algebraic]{sphere}(u,v)
   {2*cos(u)*cos(v)} {2*sin(u)*cos(v)} {2*sin(v)}
\psSolid[object=surfaceparametree,
   base=pi neg pi 0 0.75,hue=0.2 0.8,function=sphere,
   linewidth=0.2pt,opacity=0.8,ngrid=0.1]
%\gridIIID[Zmin=0,Zmax=1.5](-2,2)(-2,2)
\end{pspicture}

\end{document}

在此处输入图片描述

答案2

感谢您指出绘制轴的问题。我已上传了修改后的版本tikz-3dplot到 ctan,它应该很快就能使用了。

事实证明这是一个非常微妙的问题,这可能是由于使用旧版本的 pgf 来开发它。如果您好奇,这一切都与条件语句有关,其中\pgfmathresult返回“1”表示真,返回“0”表示假。我曾编写 tikz-3dplot 以期望“1.0”,因此条件从未满足,并且从未绘制 x/y 轴。

仅绘制线段的问题也已修复。该问题与涉及对负数求平方和平方根的运算顺序错误有关。

现在,我注意到这个输出看起来有点方方正正的,如果你愿意,可以通过增加每转的段数来让它变得平滑一点。另外,稍微旋转一下轴也没什么坏处。

\tdplotsetmaincoords{70}{100}
\begin{tikzpicture}[scale=5,line join=bevel,tdplot_main_coords,fill opacity=.15]
\pgfsetlinewidth{.2pt}
\tdplotsetpolarplotrange{30}{100}{0}{360}
\tdplotsphericalsurfaceplot[parametricfill]%
{48}%
{48}%
{1}%
{black}%
{\tdplotphi+\tdplottheta+\tdplotr}%
{\draw[color=black,thick,->] (0,0,0) -- (1.3,0,0) node[below]{\(x\)};}
{\draw[color=black,thick,->] (0,0,0) -- (0,1.3,0) node[above right]{\(y\)};}
{\draw[color=black,thick,->] (0,0,0) -- (0,0,1.3) node[above]{\(z\)};};
\end{tikzpicture}

答案3

解决方案pgfplots

\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{pgfplots.external}
\tikzexternalize
\begin{document}
\begin{tikzpicture}
\begin{axis}[width=\textwidth,
  samples=25,domain=0:360,y domain=10:30,
  xmin=-1.2,xmax=1.2,ymin=-1.2,ymax=1.2,zmin=0,zmax=1.2,
  xlabel={$x$},ylabel={$y$},zlabel={$z$},
  axis lines=center]
\addplot3[surf,opacity=0.5]
  ({cos(x)*cos(y)}, {sin(x)*cos(y)}, {sin(y)});
\end{axis}
\end{tikzpicture}
\end{document}

(标签没有放在正确的位置。这似乎是 的一个错误pgfplots。但我们可以手动放置标签。)

在此处输入图片描述

答案4

在 ubuntu 中,按照 latex -> dvips -> ps2pdf 的路径,对我有用,也可以使用 auto-pst-pdf 包并在 Acrobat 中查看。所以你的查看器可能出了问题。当然,Herbert 的代码看起来要漂亮得多!

相关内容