此为 Mathematica 4 文档,内容基于更早版本的 Wolfram 语言
查看最新文档(版本11.2)

2.9.14 高级专题:低级别图形的生成

ShowPlotMathematica 的所有图形函数都有可选项 DisplayFunction,它指定如何显示所生成的图形,它的工作原理是将所的 DisplayFunction 自动作用到生成的每一个图形对象上.

设置 DisplayFunction 选项

Mathematica 内核中,图形是用与图形基元有关的图形对象表示的. 生成图形时, 这些对象被转化为笔记本界面等Mathematica 前端或其它外部程序能处理的 低级形式.
Mathematica 使用的低级图形形式是 PostScript. Mathematica 函数 Display 将任何 Mathematica 的图形对象转化为PostScript 代码块.然后这个代码 块就可以送到一个文件, 外部程序或任何输出形态.

转化 Mathematica 图形为 PostScript

全局变量 $DisplayFunction 的默认值是 Function[Display[$Display,#]]. 在这个默认值下,由 ShowPlot 等函数产生的图形对象自动转换为 PostScript,并输送到由全局变量 $Display 的值指定的输出流. $Display 变量一般是在一个 Mathematica 进程初始化时设置的.

逐字插入 PostScript 代码

Mathematica 中可以用标准的二维图形基元产生用 PostScript 所得到的大部分效果. 有时需要直接给出 PostScript 代码, 这可用特殊的二维图形基元 PostScript 实现.
PostScript 基元中指定的字符串可以被逐字插入由 Display 产生的最终 PostScript 代码中. 使用 PostScript 时必须慎重,关键是所给的代码 将 PostScript 堆栈恢复成它完成时的初始状态. 另外,在指定对象位置时,必须知道 Mathematica 输出 PostScript 时的坐标尺度. 最后,所插入的 PostScript 基元仅在显示图形的最终 PostScript 编译器支持时才能工作.

PostScript 基元给出初始的 PostScript 代码,画出一条 Bézier 曲线

在大多数情形下,Mathematica 图形对象总产生一个特定形式的 PostScript. 选项 RenderAll 可用来选择 Graphics3D 图形对象的两种不同的形式.
关键的问题是组成三维图形的多边形如何显示. 在默认设置 RenderAll->True 下,所有给出的多边形全部显示,后面的先画出. 所有多边形中, 只能看见前面的那一些.但当一个物体被显在屏幕上时,可以看见 里面的多边形.
用这种方案处理多层物体时,会生成许多与最终图形上看不见的多边形对应的 冗长的 PostScript 代码,用设置RenderAll->False 可以避免以上问题. 这时,Mathematica 分辨出并生成最终图上那些可见的多边形或多边形的部分. 当多边形之间交线较少时,这种处理大大减少了所生成的 PostScript 代码, 但这个过程相当慢.

生成三维图形的选项

产生一个表示三维图形对象的 PostScript 时会去掉对象对成部分的深度信息. 有时需要对外部程序传输包括深度信息的表示形式,原始 Graphics3D 对象的 Mathematica 形式是一个合适的表示形式,但有些外部程序不能处理相交的多 边形. 为了解决这一问题,Graphics3D 有选项 PolygonIntersections, 用选项 PolygonIntersections->False 时,Show 的返回值不是原始的 Graphics3D 对象,而是将相交多边形分解成不相交的块,且对所给 ViewPoint 等进行设置.