编辑: 黎文定 2019-09-26
Asymptote: 矢量绘图语言 1.

79 版 本文件是 Asymptote 1.79 版的文档. http://asymptote.sourceforge.net 版权所有 ? 2004C9 Andy Hammerlindl, John Bowman, and Tom Prince. 在GNU Lesser General Public License(GNU 较宽松公共许可证)的条款下(见源文件目录 顶层的 LICENSE 文件)授予复制、发布和/或修改此文档的许可. 翻译:刘海洋(leoliu.pku@gmail.com)

2009 年7月6日ii 翻译说明 本手册根据 Asymptote 1.79 手册节选翻译.目前节选的部分是原手册的

三、

四、五章,包括全部 的基本绘图功能说明,但未包括软件配置、与LATEX 结合、扩展模块、命令行等相关内容. 手册大部分取原文直译,在不影响意义时偶有变化,或增添少量词语帮助理解.个别术语夹注原 文.增加语法高亮,大部分格式如旧,格式上偶有不妥处迳改,不另注出.原文明显有误的,更改后 用译注说明. 水平所限,本译文错漏难免,有疑义请以原文为准. 目录

第三章 教程

1

第四章 绘图命令

7 4.1 描绘(draw)7 4.2 填充(?ll)9 4.3 剪裁(clip)12 4.4 标注(label)12

第五章 编程

17 5.1 数据类型

18 5.2 路径(path)与路向(guide)25 5.3 画笔

34 5.4 变换

44 5.5 帧(frame)与图(picture)45 5.6 文件

52 5.7 变量初始式

54 5.8 结构体

55 5.9 运算符

60 5.9.1 算术和逻辑运算符

60 5.9.2 自(赋值)与前缀运算符

61 5.9.3 用户自定义运算符

61 5.10 隐式放缩

62 5.11 函数

63 5.11.1 默认参数

65 5.11.2 具名参数

65 5.11.3 剩余参数

66 5.11.4 数学函数

68 5.12 数组

69 5.12.1 切割

77 iii iv 目录 5.13 类型转换

78 5.14 导入

79 5.15 静态(static)82 索引

84

第三章 教程 一份由用户编写的 Asymptote 绝佳教程又可得自1 : http://www.artofproblemsolving.com/ Wiki/index.php/Asymptote:_Basics 要用 Asymptote 的交互模式绘制一条从坐标 (0, 0) 到坐标 (100, 100) 的直线,在命令提示符处敲: asy draw((0,0)--(100,100));

这里的单位是 PostScript 大点 (big point2 ,

1 bp = 1/72 inch) ;

-- 意谓用直线段连结.在Asymptote 坐标中像 (0,0) 和(1000,100) 这样的叫做复数(序对,pair) . 这里你可以敲入更进一步的绘图命令,它们将被加到上面展示出的图中,也可敲 quit 退出交互 模式.你可以在交互模式中使用方向键来编辑以前的行(假定你已经打开了 GNU readline 库的支持) . Tab 键将自动补全无歧义的词;

否则,再次按下 tab 将显示可能的选择.对交互模式的进一步的特殊 命令在原手册第

9 章Interactive Mode3 描述. 在批处理模式下,Asymptote 从一个文件中直接读入命令.要试试这个,把draw((0,0)--(100,100));

敲进一个文件,比方说 test.asy.然后用 MSDOS 或UNIX 命令来执行此文件:

1 这个教程是比较简单的.Asymptote 的开发者之一,法国人 Philippe Ivaldi 关于 Asymptote 的页面 (英文)以大量例子的形式,展示了 从最简单的点线绘图到复杂的模块设计,这无疑是目前 Asymptote 方面最为生动翔实学习资料.在中文社区,由用户编写的 Asymptote 教程 包括较早莫图(lapackapi@ctex.org)的一个中途已中止的项目《Asymptote 作图指南》,和cvgmt@ctex.org 目前正在编写的一个教程.中 文译介的资料包括本手册和由 goodluck@ctex.org 翻译的 Asymptote 官方 FAQ.这些中文资料一般都可以在 CTEX 论坛找到作者并获得更新 和支持. ――译者注

2 这里大点(big point)的概念来自 TEX.在TEX 之外的印刷领域,1/72 inch 就叫点 (point, pt) ,而在 TEX 中的点要小一些:

1 pt = 1/72.27 inch. ――译者注

3 本译本未包括此章. ――译者注

1 2

第三章 教程 asy -V test Windows 用户4 可以将文件拖放到桌面的 asy 图标或是把 Asymptote 作为扩展名为 asy 的文件的默认应 用程序. -V 选项打开一个 PostScript 查看窗口,从而你可以立即查看嵌入式 PostScript 输出.默认将输出 到文件 test.eps;

输出文件的前缀可以通过 -o 命令行参数改变. 可以用多于两个点画线并创建一个像这个正方形的环形路径: draw((0,0)--(100,0)--(100,100)--(0,100)--cycle);

通常直接以 PostScript 坐标工作是不方便的.下面的例子绘制一个放缩到宽

101 bp 和高

101 bp 的 单位正方形.其输出与前面的例子相同. size(101,101);

draw((0,0)--(1,0)--(1,1)--(0,1)--cycle);

为方便计,路径 (0,0)--(1,0)--(1,1)--(0,1)--cycle 可以用预定义的变量 unitsquare 代换, 或等价地,box((0,0),(1,1)). 可以按 pt(1 pt = 1/72.27 inch) 、cm、mm 或是 inches5 来设定尺寸.如果给定尺寸(size)参 数为 0,则该方向没有约束;

总的放缩将由另一方向决定(见45 页5.5 节size 函数说明) : size(0,3cm);

draw(unitsquare);

要使用户坐标表示正好 1cm 的倍数: unitsize(1cm);

draw(unitsquare);

4 原手册误作 MSDOS,或欲指 Windows 命令行,但不准确.此更正. ――译者注

5 这里 inch 和inches 意义相同,都是英尺. ――译者注

3 还可以设定不同的 x 与y单位尺寸: unitsize(1cm,2cm);

draw(unitsquare);

在Asymptote 中很容易增加标签;

用双引号引起的 L A TEX 字符串、坐标和可选的对齐方向来设定 标签: size(0,3cm);

draw(unitsquare);

label( $A$ ,(0,0),SW);

label( $B$ ,(1,0),SE);

label( $C$ ,(1,1),NE);

label( $D$ ,(0,1),NW);

Asymptote 使用标准的罗盘方向 E=(1,0)、N=(0,1)、NE=unit(N+E) 以及 ENE=unit(E+NE) 等等, 并在 Asymptote 基本模块 plain 中定义有复数(pair) up、down、right 和left.具有名为 E 的局部 变量的用户可以通过在前面缀以定义它的模块名来访问罗盘方向 E:plain.E. 这个例子绘制一条路径近似为 1/4 圆: size(100,0);

draw((1,0){up}..{left}(0,1));

一般地,一条路径由一列复数(或其他路径)确定,它们以 -- 相连来表示直线段或 .. 表示三次 样条.设定终止结点 cycle 建立一条平滑连回初始结点的环形路径,如在这里对单位圆的近似(精确 到0.06% 以内) : path unitcircle=E..N..W..S..cycle;

4

第三章 教程 三次样条曲线的每个内结点可以指定一个前缀或后缀的方向 {dir}:复数 dir 的方向分别设定该 曲线在此结点处,入向或出向切线的方向.外结点仅能在向内一边指定方向限定. 在带有后控制点 c0 的结点 z0,与带有前控制点 c1 的结点 z1 之间的一段三次样条曲线,按Bézier 曲线 (1 ? t)3 z0 + 3t(1 ? t)2 c0 + 3t2 (1 ? t)c1 + t3 z1,

0 t

1 计算6 . 如下图所示,由两个终点 z0 和z1 以及两个控制点 c0 与c1 构造的三阶中点(m5) ,正是在由四 元组 (z0, c0, c1, z1) 建立的 Bézier 曲线上对应于 t = 1/2 的点.这就允许人们通过将重新提取的三阶中 点用作终点,并将二阶与一阶中点用作控制点,递归地构造想要的曲线: 这里 m0, m1 和m2 是一阶中点,m3 与m4 是二阶中点,而m5 是三阶中点.于是曲线就通过对 (z0, m0, m3, m5) 和(m5, m4, m2, z1) 递归应用此算法构造出来. 事实上,类似的性质对于每小段中在 [0, 1] 上的任意分数 t 位置的点都成立,而不仅仅是中点 (t = 1/2) . 用这种方式构造的 Bézier 曲线具有如下性质: ? 它完全包含在给定四个点的凸包内. ? 其起点朝向从第一个端点到第一个控制点而其终点朝向从第二个控制点到第二个端点. 用户可以像这样设定两个结点间的显式控制点: draw((0,0)..controls (0,100) and (100,100)..(100,0));

然而,通常更为方便的是仅使用 .. 运算符,它告诉 Asymptote 使用在 Donald Knuth 的专著 The METAFONTbook 的第

14 章中描述的算法来选择自己的控制点.用户还可以通过设定方向、张力和卷 曲值来定制路向(或路径) . 张力越强,曲线越直,它也就越接近直线.可以将样条曲线的张力从其默认值

1 变为任意大于等 于0.75 的实数值(参考 John D. Hobby, Discrete and Computational Geometry 1, 1986) :

6 本节关于三次 Bézier 样条曲线的讲解是比较难懂的,并且下图中关于曲线离散生成的知识事实上与绘图无关.关于曲线控制的更清晰 详细的介绍可以参考 METAPOST 的手册 METAPOST: A User'

s Manual 第4章Curves,以及关于 METAPOST 与ConTEXt 的文档 METAFUN 的第

1 章. ――译者注

5 draw((100,0)..tension

2 ..(100,100)..(0,100));

draw((100,0)..tension

2 and

1 ..(100,100)..(0,100));

draw((100,0)..tension atleast

1 ..(100,100)..(0,100));

卷曲参数设定在路径端点处的弯曲程度(0 表示直的;

默认值

1 表示近似为圆) : draw((100,0){curl 0}..(100,100)..{curl 0}(0,100));

METAPOST 的... 路径连接符,在可能时它要求一个限定在由端点和方向定义的三角形内的无 拐点的曲线,它在 Asymptote 中实现为 .. tension atleast

1 .. 的方便缩写 ::(省略号 ... 在Asymptote 中用于标示可变长参数;

见66 页5.11.3 节剩余参数) .例如,比较 draw((0,0){up}..(100,25){right}..(200,0){down});

与draw((0,0){up}::(100,25){right}::(200,0){down});

--- 连接符是 ..tension atleast infinity.. 的缩写7 ,而&

连接符连结两条路径,并去除第一 条路径的第最后一个结点(它一般应该与第二条路径的第一个结点重合) . 一条相连的 Asymptote 路径,与一条 PostScript 的subpath(子路径)等价.^^ 二元运算符,它 要求画笔从左边路径的终点移动 (而不绘制出来或影响终点的曲率)到右边路径的起点,可以用来将 若干 Asymptote 路径聚集到一个 path[] 数组中(等价于一条 PostScript 路径) : size(0,100);

path unitcircle=E..N..W..S..cycle;

path g=scale(2)*unitcircle;

filldraw(unitcircle^^g,evenodd+yellow,black);

7 它的效果和通常的折线连接基本相同,只是在弯........

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题