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}
但结果却是这样的:
显然,本应为虚线的线(因为它们被隐藏了)却不是虚线,而一些本应为连续的线却是虚线。有人知道如何解决这个问题吗?
感谢您的回答。仍然有些奇怪。如果我设置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}