2.9.14 高级专题:低级别图形的生成Show 和 Plot 等 Mathematica 的所有图形函数都有可选项 DisplayFunction,它指定如何显示所生成的图形,它的工作原理是将所的 DisplayFunction 自动作用到生成的每一个图形对象上. 设置 DisplayFunction 选项 在 Mathematica 内核中,图形是用与图形基元有关的图形对象表示的. 生成图形时, 这些对象被转化为笔记本界面等Mathematica 前端或其它外部程序能处理的 低级形式. Mathematica 使用的低级图形形式是 PostScript. Mathematica 函数 Display 将任何 Mathematica 的图形对象转化为PostScript 代码块.然后这个代码 块就可以送到一个文件, 外部程序或任何输出形态. 转化 Mathematica 图形为 PostScript 全局变量 $DisplayFunction 的默认值是 Function[Display[$Display,#]]. 在这个默认值下,由 Show 和 Plot 等函数产生的图形对象自动转换为 PostScript,并输送到由全局变量 $Display 的值指定的输出流. $Display 变量一般是在一个 Mathematica 进程初始化时设置的. 逐字插入 PostScript 代码 在 Mathematica 中可以用标准的二维图形基元产生用 PostScript 所得到的大部分效果. 有时需要直接给出 PostScript 代码, 这可用特殊的二维图形基元 PostScript 实现. 在 PostScript 基元中指定的字符串可以被逐字插入由 Display 产生的最终 PostScript 代码中. 使用 PostScript 时必须慎重,关键是所给的代码 将 PostScript 堆栈恢复成它完成时的初始状态. 另外,在指定对象位置时,必须知道 Mathematica 输出 PostScript 时的坐标尺度. 最后,所插入的 PostScript 基元仅在显示图形的最终 PostScript 编译器支持时才能工作. PostScript 基元给出初始的 PostScript 代码,画出一条 Bézier 曲线
Out[1]= |  |
在大多数情形下,Mathematica 图形对象总产生一个特定形式的 PostScript. 选项 RenderAll 可用来选择 Graphics3D 图形对象的两种不同的形式. 关键的问题是组成三维图形的多边形如何显示. 在默认设置 RenderAll->True 下,所有给出的多边形全部显示,后面的先画出. 所有多边形中, 只能看见前面的那一些.但当一个物体被显在屏幕上时,可以看见 里面的多边形. 用这种方案处理多层物体时,会生成许多与最终图形上看不见的多边形对应的 冗长的 PostScript 代码,用设置RenderAll->False 可以避免以上问题. 这时,Mathematica 分辨出并生成最终图上那些可见的多边形或多边形的部分. 当多边形之间交线较少时,这种处理大大减少了所生成的 PostScript 代码, 但这个过程相当慢. 生成三维图形的选项 产生一个表示三维图形对象的 PostScript 时会去掉对象对成部分的深度信息. 有时需要对外部程序传输包括深度信息的表示形式,原始 Graphics3D 对象的 Mathematica 形式是一个合适的表示形式,但有些外部程序不能处理相交的多 边形. 为了解决这一问题,Graphics3D 有选项 PolygonIntersections, 用选项 PolygonIntersections->False 时,Show 的返回值不是原始的 Graphics3D 对象,而是将相交多边形分解成不相交的块,且对所给 ViewPoint 等进行设置.
|