pst-solides3d 中的相交框

pst-solides3d 中的相交框

我需要制作一些以复杂的方式相交的 3D 盒子(即平行六面体)的图片,因此我尝试了 pst-solides3d。

这是最小的工作示例:一个细长的蓝色框应在其中心刺穿一个扁平的黄色框。

\documentclass{standalone}
\usepackage{pstricks,pst-solides3d}
\begin{document}
\begin{pspicture}(-5,-5)(5,5)
    \psset{viewpoint=20 25 15,Decran=50,solidmemory}
    \axesIIID(0,0,0)(2,2,2)
    \psSolid[name=longbox,
        object=parallelepiped,
        a=3,b=.2,c=.2,
        fillcolor=blue](.5,.5,.5)
    \psSolid[
        name=flatbox,
        object=parallelepiped,
        a=.25,b=2,c=2,
        fillcolor=yellow](.5,.5,.5)
    \psSolid[object=fusion,
        action=draw,
        base=flatbox longbox]
        (0,0,0)
    \composeSolid
\end{pspicture}
\end{document}

输出结果很奇怪:薄盒子的一块变成了黄色。似乎包装无法确定哪块表面在前面。

输出

使用选项action=draw**,结果甚至更糟:

在此处输入图片描述

难道我做错了什么?

答案1

绘制隐藏表面需要蓝色立方体的六个以上的多边形形状。当然,action=none除最后一个之外,所有对象都必须计算:

\documentclass{standalone}
\usepackage{pst-solides3d}
\begin{document}
\begin{pspicture}(-3,-2)(3,3)
    \psset{viewpoint=20 25 15,Decran=50,solidmemory,action=none}
    \axesIIID(0,0,0)(2,2,2)
    \multido{\rA=0.0+0.3,\iA=0+1}{11}{%
      \psSolid[name=l\iA, object=parallelepiped,a=0.3,b=.2,c=.2,
          fillcolor=blue](-0.75 \rA\space add .5 .5)}
    \psSolid[
        name=flatbox,
        object=parallelepiped, a=.25,b=2,c=2,fillcolor=yellow](.5,.5,.5)
  \def\List{l0 }
  \psforeach{\iA}{1,2,..,10}{\xdef\List{\List\space l\iA\space }}
    \psSolid[object=fusion,action=draw**,base=flatbox \List]
\end{pspicture}

\end{document}

在此处输入图片描述

相关内容