创建多面体图形(3D):从 PSTricks 切换到 TikZ 是否值得?

创建多面体图形(3D):从 PSTricks 切换到 TikZ 是否值得?

我经常使用 PSTricks 来创建多胞形图形。最近,我注意到有人在讨论 PSTricks 还是 TikZ 是创建各种图形的更好选择。从一般的关于这个问题的讨论,我得出的结论是,我将来想使用 TikZ 而不是 PSTricks。

然而,在我切换到 TikZ 之前,我想知道 TikZ 是否适合特别的我想用它做什么。我主要使用pst-solides3dPSTricks 包,我想知道 TikZ 是否提供了我使用的 PSTricks 功能的替代品。为了让我的问题更具体,我给出一个使用 PSTricks 创建的多面体的非常简单的例子,并给你一个我喜欢这个例子中的功能列表,然后告诉我这些特定的功能是否可以轻松地在 TikZ 中实现。

\documentclass{minimal}
\usepackage{pst-solides3d}
\begin{document}

\begin{pspicture}(-2.5,-1)(6,4)
\psset{viewpoint=40 16 12,Decran=130,solidmemory}
\psSolid[object=new,linewidth=0.7\pslinewidth,
 action=draw*,
 name=A,
 fcol=1 (0.8 setgray),
 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.2, %u
 faces={
  [1 2 3 4]
  [1 2 5]
  [2 3 5]
  [3 4 5]
  [4 1 5]}]%
\psSolid[object=plan,definition=solidface,action=none,args=A 0,name=S0]
\psset{fontsize=8}
\psProjection[object=texte,text={G},plan=S0]%
\psSolid[object=plan,definition=solidface,action=none,args=A 1,name=S1]
\psProjection[object=texte,text={H},phi=90,plan=S1]%
\psPoint(0, 0, 1.2){a}
\uput[u](a){$a_G$}
\psdot[dotsize=0.1](a)
\end{pspicture}

\end{document}

多胞形例子

我喜欢它的地方:

  1. 我可以根据给定的一组三维坐标创建多面体。
  2. 如果我想改变视点,我不需要输入整个新多面体的代码,而只需改变即可\psset{viewpoint=40 16 12,Decran=130}
  3. 隐藏线是虚线。重要提示:我不必指定隐藏的线;确定隐藏线应该是自动的。
  4. 我可以在多面体的表面上写文字(如本例中的 G、H)。
  5. 我可以轻松地给脸部上色(比如给 H 脸涂上灰色)。
  6. 角落很容易标记(用点)和标签(a_G在示例中)。

使用 TikZ 可以轻松完成此操作吗?使用 TikZ 创建具有上述特征的多面体的示例会很好(如果我决定切换,这也将帮助我开始使用 TikZ)。我认为如果这些基本功能适用于 TikZ,那么我就可以处理 TikZ 可能无法实现的其他细节。

编辑:回答我可能想要绘制的“最复杂”多胞形的问题:我不知道。虽然我不知道 TikZ,但我猜想,增加坐标/角的数量来增加复杂性应该不会有问题(是吗?)。当然,输入代码更费力(不用说,对于 pstricks 也是如此),但我认为一般的可行性不应该受到影响(对吗?)。这就是为什么我专注于特征而不是多胞形的复杂性。我可以说的一件事是,我可能只会画多胞形。我以后可能会想画更复杂的多胞形,但目前为止我画过的最复杂的多胞形可能是这个(是的,顶部的额外七边形是故意的):

    \documentclass{minimal}

\usepackage{pst-solides3d}

\begin{document}

\begin{pspicture}[showgrid=false](-2,-0.5)(2,2.7)
\psset{viewpoint=26 7 5,Decran=50}
\psSolid[object=new, linewidth=0.7\pslinewidth,
action=draw*,
name=A,
sommets=
%n=7
0 0 0 %0 0
0.656862 0.82368 1 %w1 1
-0.234432 1.02711 1 %w2 2
-0.949194 0.457108 1 %w3 3
-0.949194 -0.457108 1 %w4 4
-0.234432 -1.02711 1 %w5 5
0.656862 -0.82368 1 %w6 6
1.05353 0 1 %w7 7
0.311322 0.390385 0.473952 %e1 8
-0.111109 0.486802 0.473952 %e2 9
-0.449873 0.216647 0.473952 %e3 10
-0.449873 -0.216647 0.473952 %e4 11
-0.111109 -0.486802 0.473952 %e5 12
0.311322 -0.390385 0.473952 %e6 13
0.499321 0 0.473952 %e7 14
-0.311322 -0.390385 0.526048 %u-e1 15
0.111109 -0.486802 0.526048 %u-e2 16
0.449873 -0.216647 0.526048 %u-e3 17
0.449873 0.216647 0.526048 %u-e4 18
0.111109 0.486802 0.526048 %u-e5 19
-0.311322 0.390385 0.526048 %u-e6 20
-0.499321 0 0.526048 %u-e7 21
0 0 1, %u 22
faces={
[0 13 16 12]
[0 12 15 11]
[0 11 21 10]
[0 10 20 9]
[0 9 19 8]
[0 8 18 14]
[0 14 17 13]
[16 13 17 22]
[17 14 18 22]
[18 8 19 22]
[19 9 20 22]
[20 10 21 22]
[21 11 15 22]
[15 12 16 22]
[1 2 3 4 5 6 7]
}]
\end{pspicture}

\end{document}

第二个多面体例子

通过这个例子,我们可以看出为什么隐藏线是虚线:如果它们是实线,那么图片就不会像这个一样易读。

答案1

将来,当 TikZ 使用 Lua 扩展来计算隐藏线和表面时,这可能有意义。那时,使用 Lua 可能可以完成与使用编程语言 PostScript 相同的操作。

相关内容