PGF / TikZ / PGFplots 图片中的光物体 / 光源,类似 PSTricks

PGF / TikZ / PGFplots 图片中的光物体 / 光源,类似 PSTricks

我偶然发现了PSTricks位于

http://melusine.eu.org/syracuse/pstricks/pst-solides3d/animations/a43/ https://i.stack.imgur.com/NlqHZ.gif

并注意到它使用光源来为物体提供颜色/阴影。这可以从以下代码中看出:

http://melusine.eu.org/syracuse/pstricks/pst-solides3d/animations/a43/anim.tex

我的所有图片都是用 制作的,PGF我希望以与上面动画中类似的方式使用光源PSTricks。不幸的是,这在 中尚未实现PGF

是否可以对我的PGF照片进行一些后期处理以获得光源效果?我正在考虑和PSTricks,但似乎做不到。AsymptoteAdobe Illustrator

我认为如果我们能够利用光源来制作矢量图形图片那就太好PGF

答案1

唯一的障碍是 TeX。

Postscript 用于完成繁重的工作和线性代数,但我们无法依赖使用 PGF 的某个老大哥。最好的办法是找到一个能够理解 Z 缓冲区和固体反射的库,并在其他语言中调用它。

pgfplots仅使用 TeX 还不知道这一点。即使这是可能的(我相信相反),编译最简单的情况也会花费大量时间,同样,即使忽略定点算法中的 TeX 不精确性。

关于原因的更全面的解释在这里根本区别:PSTricks、TikZ/PGF 等尤其是赫伯特的回答。

答案2

正如 @percusse 所回答的,TeX 是这里的障碍。我通过创建一个(粗略的)SAGE/python 脚本来避免使用 TeX,该脚本将拍摄已经三角化的 SAGE 3d 图片,并将其转换为 tikz 2d 多边形,并进行某种光/阴影计算。不过,您确实需要 SAGE 来创建 tikz 文件。

这是可在 github 上获取,以防您想尝试一下。

您只需编写几行 Python 脚本(从编辑器内部调用),该脚本采用如下 SAGE-python 代码片段(这是一个具有奇点的隐式曲面):

P=implicit_plot3d( x**3+y**2-z**2 ==0,(x,-2,2), (y,-2,2),(z,-2,2), plot_points=100)
P.triangulate()
Picture(P.face_list(), boxed=False, axes=True,
    nodes=[{"Position": (0,0,0), "Text": "" , 
    "Options": "circle, inner sep=4pt,black!80, pin={[pin edge={black!80, semithick}]-120:Singular point}, draw"}]
    ).render()

并生成如下独立文件:

\documentclass[border=1pt]{standalone}
....
\begin{document}
\begin{tikzpicture}[scale=25.361, line cap=round, line width=.1pt, line join=round, line cap=round]
\begin{pgfonlayer}{textLayer}
\node[circle, inner sep=4pt,black!80, pin={[pin edge={black!80, semithick}]-120:Singular point}, draw] at (0.000000,0.000000) {};
\end{pgfonlayer}
\filldraw[fColor=32] (-0.005352,-0.005537)--(-0.005287,-0.005489)--(-0.005163,-0.005353)--cycle;
\filldraw[fColor=32] (-0.004111,-0.004313)--(-0.005163,-0.005353)--(-0.005287,-0.005489)--cycle;
... lots more little polygons.
\end{tikzpicture}
\end{document}

当你用以下方式编译此文件时lualatex(这很重要,大量的多边形需要大量的内存),你会得到类似

轮廓图像

无论有哪些灯光/阴影,都内置于 Python 脚本中,所有与 3d、视图、投影、轴、坐标平移等相关的计算也都内置于其中。

优点:您会得到一张美丽的图像(这当然是一个品味问题)。

缺点:

  • 您需要一些重型数学软件,在本例中是 SAGE。

  • 您依赖外部脚本。您最好找一个具有外部脚本调用功能的优秀编辑器。

  • 编译仍然很慢。你可能需要使用tikzexternalize技巧。

  • 您依赖 lualatex 来编译大数字(外部化可以在一定程度上缓解这种情况)。

  • 最后我只实现了一个白光源,一种前景色和一种背景色。

其他示例:

在此处输入图片描述

在此处输入图片描述

如果你对这个脚本感兴趣,你可以从 github 获取

相关内容