pst-solides3d 和隐藏线

pst-solides3d 和隐藏线

pstricks我第一次尝试用 绘制图形。不幸的是,我很难做到。我试图用 绘制一个五边形圆锥体和一个八面体pst-solides3d,但它画出了一些虚线,而这些虚线实际上并没有被隐藏。我使用了以下代码:

\begin{pspicture}(-2,-1)(3,4) 
\psset{viewpoint=25 8 5,Decran=50} 
\psSolid[object=new, 
action=draw, 
sommets= 
0 0 0
0.343561 1.05737 1
-0.899454 0.653491 1
-0.899454 -0.653491 1
0.343561 -1.05737 1
1.11179 0 1, 
faces={  
[0 1 2]
[0 2 3]
[0 3 4]
[0 4 5]
[0 5 1]
[ 1 2 3 4 5]}]% 
\end{pspicture}

\begin{pspicture}(-2,-1)(3,4) 
\psset{viewpoint=25 8 5,Decran=100}
\psSolid[object=new, 
action=draw, 
sommets= 
%n=4
0 0 0 %0
0.420448 0.420448 0.5 %e1
-0.420448 0.420448 0.5 %e2
-0.420448 -0.420448 0.5 %e3
0.420448 -0.420448 0.5 %e4
0 0 1, %u 
faces={
[0 1 4]
[0 1 2]
[0 2 3]
[0 3 4]
[2 3 5]
[3 4 5]
[1 2 5]
[1 4 5]}]% 
\end{pspicture} 

但结果却是这样的:

https://i.stack.imgur.com/2HTNa.jpg

显然,本应为虚线的线(因为它们被隐藏了)却不是虚线,而一些本应为连续的线却是虚线。有人知道如何解决这个问题吗?


感谢您的回答。仍然有些奇怪。如果我设置num=all,就像在代码中一样

\begin{pspicture}(-2,-1)(3,4) 
\psset{viewpoint=25 12 5,Decran=100}
%\axesIIID[showOrigin=false](1,1,1)(3,2,2.5)
\psSolid[object=new, 
action=draw*,
fillcolor=red,
opacity=.6,
fcol=8 (Blue),
num=all,
sommets= 
%n=4
0 0 0 %0
0.420448 0.420448 0.5 %e1
-0.420448 0.420448 0.5 %e2
-0.420448 -0.420448 0.5 %e3
0.420448 -0.420448 0.5 %e4
0 0 1 %u
0 1.18921 1 %w1
-1.18921 0 1 %w2
0 -1.18921 1 %w3
1.18921 0 1, %w4
faces={
[0 1 4]
[0 2 1]
[0 3 2]
[0 4 3]
[2 3 5]
[3 4 5]
[1 2 5]
[1 5 4]
[6 7 8 9]}]% 
\end{pspicture}

然后我得到以下结果:错误编号 这显然不符合预期。我该如何解决这个问题?

答案1

action的关键pst-solides3d定义如何绘制对象:

  • none:什么也没画。
  • draw:绘制实体作为框架,并为隐藏边设置虚线。
  • draw*:用虚线绘制实体以表示隐藏边,并为可见面着色。
  • draw**:使用绘画算法绘制实体,没有隐藏边缘,但可见面有颜色。

使用action=draw**,您的文档生成了以下明显不完整的多面体:

在此处输入图片描述

虽然面的边缘构成了完整的视觉绘图,但仍有一些面缺失。现在,您可能会注意到它们构成了代码的一部分,但它们需要符合面规范(来自pst-solides3d文档):

...一个面的特征在于它的顶点索引列表,当从实体的外部查看该面时,按逆时针顺序列出。

找出顺序(以及哪个方向是顺时针或逆时针)的最简单方法是将键值num=all和添加show=all\psSolid对象中。也就是说,使用

\psSolid[action=draw,num=all,show=all,...]

这将为所有顶点 ( sommets) 和所有面 ( faces) 编号。以正确的逆时针方式重写面将产生预期结果:

在此处输入图片描述

\documentclass{article}
\usepackage{pst-solides3d}% http://ctan.org/pkg/pst-solides3d
\begin{document}
\begin{pspicture}(-2,-1)(3,4) 
\psset{viewpoint=25 8 5,Decran=50} 
\psSolid[object=new,%num=all,show=all,
  action=draw,
  sommets= 
    0 0 0
    0.343561 1.05737 1
    -0.899454 0.653491 1
    -0.899454 -0.653491 1
    0.343561 -1.05737 1
    1.11179 0 1, 
  faces={%
    [0 1 5]
    [0 5 4]
    [0 4 3]
    [0 3 2]
    [0 2 1]
    [1 2 3 4 5]}]% 
\end{pspicture}

\begin{pspicture}(-2,-1)(3,4) 
\psset{viewpoint=25 8 5,Decran=100}
\psSolid[object=new, 
  action=draw,%num=all,show=all,
  sommets= 
    0 0 0 %0
    0.420448 0.420448 0.5 %e1
    -0.420448 0.420448 0.5 %e2
    -0.420448 -0.420448 0.5 %e3
    0.420448 -0.420448 0.5 %e4
    0 0 1, %u 
  faces={
    [0 2 1]
    [0 1 4]
    [0 4 3]
    [0 3 2]
    [5 1 2]
    [5 2 3]
    [5 3 4]
    [5 4 1]}]% 
\end{pspicture}

答案2

使用对象八面体:

\documentclass{article}
\usepackage[dvipsnames]{pstricks}
\usepackage{pst-solides3d}
\begin{document}
\psset{viewpoint=25 8 5,Decran=50} 
\begin{pspicture}(-2,-2)(3,3) 
\psSolid[object=octahedron, a=1, hue=0.2 0.6]
\end{pspicture}
%
\begin{pspicture}[solidmemory](-2,-2)(2,2) 
\psSolid[object=octahedron, a=1,
   plansepare={[0 0 1 0]},% plain to cut the object: z=0
   name=Octa, action=none]
\psSolid[object=load, load=Octa1, hue=0.2 0.6]% lower half
\psSolid[object=load, load=Octa0, hue=0.2 0.6](0,0,0.5)% upper half
\end{pspicture}

\end{document}

在此处输入图片描述

相关内容