# KSEG帮助

## 快速跳转:

开始/简短攻略
介绍
选择
作图
变换
测量和计算
编辑和重约束
视图及图像输出
作图器

## 开始/简短攻略

跟着下面的做, 你马上就能够熟悉KSEG最基本的使用, 就能自己和它玩了. 想学习高级功能, 把整篇文档都读完吧.

1. 启动KSEG. 嗯, 看到一张几乎充满整个窗口的画布了吧(它周围有工具栏, 滚动条, 菜单和状态栏).
2. 在画布中央右击鼠标, 创建点A.
3. 按住SHIFT键, 同时在画布的其它区域上右击鼠标, 创建点B. 按住SHIFT键的目的是使点A仍被选中, 此时画布是有了两个被选中的点.
4. 在菜单中点击"新建/用圆心和点画圆", 于是创建了一个以点A为圆心, 经过点B的圆. 此时圆显示为选中 状态而点A和B不再被选中.
5. 在点B上左击鼠标, 选中点B(同时圆不再被选中). 按住SHIFT键点击点A将其选中.
6. 再次点击菜单"新建/用圆心和点画圆". 这次创建了一个以点B为圆心(因为先选择了点B), 经过点A的园.
7. 按住SHIFT, 点击选中第一个圆. 现在有两个被选中的圆.
8. 点击菜单"新建/交点". 在两个圆的交点处出现了两个点, 都处于选中状态.
9. 点击菜单"新建/直线". 创建了点A和B的垂直平分线.
10. 现在用鼠标左键拖拽点A. 哈, 看到KSEG是干啥吃的了吧.

这当然不是KSEG中创建垂直平分线最高效的方法(这是尺规作图的方法), 只是展示一下如何创建及选择对象.
返回顶部

## 介绍

KSEG使得你可以轻松地展示尺规作图的动态特性, 并且使得几何探索尽可能地快捷和简单. 几乎每一次我坐下来玩KSEG, 我都会发现一个以前所不知道的几何特性.

使用KSEG, 你可以创建动态作图: 首先在画布上放置一些点, 用这些点作出其它对象, 如线和圆. 然后你可以拖拽这些点, 观察整个的图是如何变化的. 当然KSEG还有更多的功能, 但这是基本的思想. 我还经常用它生成LaTeX中使用的高质量的几何示意图. 我发现最简单的方法(用在LaTeX中)是: 在KSEG中作好图, 打印成 .ps 文件, 然后转换为 EPS 格式, 在 XFIG 中标注, 再输出为 PS/LaTeX 格式.

术语问题: 我使用词语"Construction(作图)"指KSEG中使用的一种类宏(macro-like) 文档类型, 也用它表示一组相互依赖的几何对象. 通常通过上下文能理解我的所指, 但在这个文档中我 使用大写首字母的"Construction"表示文档类型, 而用小写的"construction"表示一组几何对象. (译者: "Constructions"可以看成是作图程序, 给出一定的输入, 它就会自动地作图, 给出最终的 图形, 也可以看成是个作图机器, 因此下面被翻译为"作图器". 而"construction"就翻译为"作图". "play"的意思用作图器自动作图, 因此翻译为"自动作图", 有时也翻译为"回放")

### 几何对象(Geometric Objects)

点, 线, 测量, 计算, 轨迹等都是几何对象. 一个几何对象可能有其所依赖的"父"几何对象. 例如你创建了两个点, 又通过这两点创建了一条直线, 那么这两个点就是这条直线的"父(亲/母亲/双亲)", 直线是这两个点的"孩子(儿女)". 当你拖拽一个自由(无父母)的点时, 所有它的后代都要重新计算. 当你拖拽一个有"父母"的对象(这称作逆向拖拽)时, (KSEG通过)一个复杂的算法确定哪些"父母"对象需要 移动, 如何移动, 使得你所拖拽的对象能够移动. (译者: 我所理解的是, 一个对象可能有多个"父母". 当一个对象移动时, 它的孩子们要根据它们("孩子")的"父母们"的当前位置来确定, 而它的"父母们"只要 和它保持一致就好, 因此它的"父母"和它一起平动, 保持它们之间的关系不变. 而该对象的"父母", "孩子"的移动又引起它们自己的"父母"或"孩子"的移动, 因此一个对象移动时, 它的整个"家族"可那都要动. 是够"复杂"的!)

一个几何对象可能是在几何中"不存在的", 如不相交的圆的"交点". 如果圆移动后变得更近了, 交点就真的存在了. 不存在对象的孩子也是不存在的(轨迹是个例外, 详情见本文档轨迹部分). 因此在你拖拽一个点过程中, 可能一下子你作的图就不见了, 因为两条线段不再相交了(消失的对象都 是交点的后代), 不必担心, 当两条线段再次相交时一切都回来了.

返回顶部

## 选择(Selecting)

为了构建新对象, 通常要选择已有的对象. 下面是一些选择方法:

- 在空白处左击鼠标, 所有选中的对象取消选择.
- 在未被选择的对象上左击鼠标, 选中该对象, 同时所有其它对象不被选择.
- 在空白处按下鼠标左键, 拖动鼠标, 释放, 所有与刚才拖出的方框相交(包含或者相交) 的对象被选中, 其余的不被选择.
- 按住 SHIFT 键的同时左击对象, 如果该对象不处于选中状态, 则被选中, 如果处于选中状态 则取消选择. 其它对象的选中状态不变.
- 按住 SHIFT 键, 在空白出按下鼠标左键, 拖动鼠标, 释放, 所有与刚才拖出的方框相交 的对象被选中. (其它对象的选中状态不变)
- 在作图器(Construction)中, 还可以在作图命令列表(Construction list)中选择对象. 可以点击, 可以拖拽, 也可以用 SHIFT 键. 与其它方法不同的是, 这允许你选择不可见和不存在的对象.

当你点击的点上有多个对象, 事情就复杂些了(对KSEG来说, 是这样的, 你将会直观地看到). 对象有被选择的不同优先级: 先是点, 曲线, 文字, 轨迹其次, 填充的对象最后. 如果鼠标 点的地方同时有不同优先级的对象, 只要最高的被选择, 其它的不选. 对于同一优先级的多个对象, 算法则是: 在选择的可能性中进行循环. 在你点击鼠标时可以通过观察状态栏的显示以确定那个对象会被选中.

### 选择组(Selection Groups)

选择多个对象的更强大的方法是使用则组. 一个选择组是一组对象, 当你告诉KSEG这些对象是一组时, 就可以更轻松地进行选择操作. 点击菜单"编辑/选择组(Edit/Selection Groups...)", 打开 选择组的管理窗口, 显示出一个列表框, 其中包括所有的内置选择组和你打开的文档中的选择组. 内置选择组以星号标记, 每种类型的对象有一个选择组, 其组合了该类型的所有对象.

当你在选择组管理器的列表框中选择一个(或多个)选择组, 并点击选择(Select)按钮, 所有该组的对象 都被选中, 而其它类型的对象都未被选择. 按住 SHIFT 键并点击选择(Select)按钮, 该组的对象 被选中, 其它类型的对象维持原来的选择状态. 点击取消选择(Deselect)按钮会取消该组对象的选择. 当有至少一个对象被选择时, 新建组(New Group)按钮被激活, 点击它会创建一个包括所选对象的组. 内置组不能被删除(非内置组(non-built-in group)/自建组可以).

复选框"影响不可见项(Affect Invisible Items)" 只对内置组有影响. 当其未被选中(默认状态)时, "所有点"指所有非隐藏点; 选中时, "所有点"包括隐藏点. 自建组总是选择/不选择其中的所有对象, 包括 隐藏的.

自建组在其中的所有项都被删除后变成空组(直接删除或通过undo). 这样的组会被用'-'标记, 但不会自动删除 (因为通过undo/redo可能给该组带来对象而复活). 但空组不会被存储到文档中.

返回顶部

## 作图(Constructing)

当新对象被创建时, 他们立即被选中, 其它对象被取消选择, 例外是按住 SHIFT 键右击鼠标创建点时.

### 点(Points)

- 在KSEG画布的空白区域右击鼠标, 创建自由点(无"父母").
- 在曲线上右击鼠标, 创建被约束于曲线(直线, 线段, 射线, 圆, 弧)的点(只能在曲线上移动, 随曲线一起移动).
- 创建约束于两条曲线交点的点: 直接在交点上右击鼠标. 或者选中这两条曲线, 点击菜单 "新建/交点(New/Intersection point(s))". 当两条曲线有两个交点时, 使用菜单方法可以创建两个 交点, 而右击方法只能创建一个.
- 创建一条或多条线段的中点: 选中它们并点击菜单(或按钮)"新建/中点(New/Midpoint(s))"

还有两种类型的点: 端点(endpoints)和中心点(center points). 这在Construction中非常 有用, 那里你可能有一个线段但没有端点, 或者一个圆没有中心. 要想给线段, 射线, 圆弧创建端点, 点击菜单"新建/端点(New/Endpoint(s))". 要给圆或弧线创建中心, 点击菜单"新建/中心点(New/Center Point)".

### 线段(Segments)

只有一种画线段的方法: 选中两个或更多的点, 点击菜单"新建/线段(New/Segment(s))". 如果两个点被选中, 只创建一条线段. 如果 n > 2 个点被选中, 将会创建 n 个线段.

### 射线(Rays)

- 通过一个点(端点)和另外一个点(射线上的点)创建射线: 选中这两个点(端点先选择), 点击菜单"新建/射线(New/Ray)". 选择多个点可以创建多条射线.
- 创建角的平分线: 选中定义该角的三个点(一个顶点, 每条边上各一个点), 点击菜单 "新建/角平分线(New/Angle Bisector)". 角平分线总是平分锐角部分.

### 直线(Lines)

- 创建直线: 选中两个或多个点, 点击菜单"新建/直线(New/Line(s))"
- 通过给定直线外一点画直线的平行线: 选择点和直线(也可能是线段或射线), 点击菜单 "新建/平行线(New/Parallel Line)". 你还能选择多个点或者多个直的对象(直线, 线段, 射线) 来创建平行线(但不能点和直线都选择多个).
- 作垂线: 和作平行线一样选择对象, 点击菜单"新建/垂线(New/Perpendicular Line(s))"

### 圆(Circles)

- 给定圆心和圆上的点创建圆: 依次选择圆心和点, 点击菜单"新建/用圆心和点画圆 (New/Circle By Center And Point)".
- 给定圆心和半径作圆: 选择圆心和长度为半径的线段, 点击菜单"新建/用圆心和半径作圆 (New/Circle By Center And Radius)"

### 圆弧(Arcs)

圆弧只能用三个点创建, 选择三个点, 点击菜单"新建/用三点画弧线(New/Arc By Three Points)".

### 轨迹(Loci)

轨迹是一种几何对象, 表示当一个点("驱动器(driver)")在一条曲线上移动时, 另外一个几何对象 ("被驱使对象(driven object)")的移动路径. 要创建一个轨迹, 选择曲线上的一个点(约束于 该曲线上的点), 再选择一个它的后代对象, 点击菜单"新建/轨迹(New/Locus)". 被驱动对象可以是 一个点, 曲线, 甚至是另一个轨迹(但可能生成得很慢). 即使被驱动对象不存在, 也可能有轨迹, 因为 当驱动器移动到另外的位置时, 被驱动对象就存在了.

举例, 设L是一直线, A是直线L上一点, B是直线外一点, K是通过A的AB的垂线. 那么如果K是被驱动对象而A 是驱动器, 则K的移动轨迹的外缘就是以B为焦点, 与L相切的抛物线.

因为轨迹是几何对象的无限集合, KSEG无法精确计算. 事实上使用了一些样本做近似. 你可以 改变KSEG计算的样本数: 在轨迹上双击鼠标, 或者选择轨迹, 点击菜单"编辑/更改样本数 (Edit/Change Number Of Samples...)". 例外的情况是当被驱动对象是点的时候. 这时KSEG自动将样本点连接起来, 并用自适应的算法快速地将轨迹变得光滑和准确. 这种情况下你所 指定的样本数只是一个上限: 当算法认为轨迹已经足够好的时候会自动停止计算样本. 这种算法 产生的轨迹看上去比与KSEG类似的程序生成的轨迹好得多.

### 填充对象(Filled Objects)

- 创建多边形面: 选择3个或3个以上的点, 点击"新建/多边形(New/Polygon)".
- 创建扇形: 选中圆弧, 点击"新建/扇形(New/Arc Sector)". 创建弓形, 选中圆弧, 点击"新建/弓形(New/弓形)".
- 创建圆面: 选择圆, 点击"新建/圆面(New/Circle Interior)".

返回顶部

## 变换(Transforms)

KSEG能对几何对象作仿射变换. 通常的做法是选择对象, 点击菜单"变换/选择*(Transform/Choose *)" 进行变换. 试试, 选中想变换的对象, 在菜单中选择你想作的变换, 变换后的复制品就出现了. 下面是 详细信息: 选择:

- 向量: 选择两个点, 点击菜单"变换/选择向量(Transform/Choose Vector)", 就出现了从第一个点 指向第二个点的向量.
- 镜像: 选择一条直线, 线段或射线, 点击"变换/选择镜像(Transform/Choose Mirror)".
- 中心: 选中一个点, 点击"变换/选择中心(Transform/Choose Center)".
- 选择角度: 选中三个点, 或一个测量值, 或计算值, 点击"变换/选择角度(Transform/Choose Angle)".
- 选择比例: 选择两条线段, 或一个测量值, 和计算值, 点击"变换/选择比例(Transform/Choose Ratio)".

当前选中变换的对象都被标记为黄色, 让你知道将进行什么变换. 如果你已经执行了变换, 但想去掉黄色标记 (为了美感或是显示问题--标记不会被打印的), 点击"变换/清除选择(Transform/Clear Chosen)".

- 执行平移变换必须选择一个向量.
- 映射对象必须选择一个镜像.
- 缩放对象, 必须选择一个中心和一个比例.
- 旋转对象必须选择一个中心和一个角度.

能够用选定的测量或计算值进行变换, 使得你能轻松地创建尺规作图难以完成的图形. 你可能要小心地 使用这个技巧, 但它也可能很有趣的--如例子coord.seg文件展示了如何用KSEG画轨迹那样的参数曲线.
返回顶部

## 测量和计算(Measuring and Calculating)

在KSEG中可以测量多种几何量, 并利用测量进行计算. 所有距离的单位都是像素, 角的单位是度. 你可以测量的有:

- 测量点与点, 或曲线的距离: 选择这两个对象, 点击"测量/距离(Measure/Distance)".
- 测量线段的长度: 选中线段, 点击"测量/长度(Measure/Length)".
- 测量圆的周长: 选中圆, 点击"测量/周长(Measure/Circumference)".
- 测量圆弧的弧长: 选中圆弧, 点击"测量/弧长(Measure/Arc Length)".
- 测量圆弧或圆的半径: 选中对象, 点击"测量/半径(Measure/Radius)".
- 测量三点定义的角度: 选中三个点, 点击"测量/角度(Measure/Angle)".
- 测量两条线段的比例: 选中它们, 点击"测量/比例(Measure/Ratio)".
- 测量线段, 直线或射线的斜度: 选中对象, 点击"测量/斜度(Measure/Slope)".
- 测量填充对象的面积: 选中多边形, 扇形, 弓形或圆面, 点击"测量/面积(Measure/Area)". 如果你测量的是一个"坏的"多边形(边没有围成简单的封闭曲线), 测量结果可能与屏幕上显示的面积不符.

可以把几个测量结果组合到一个计算中. 点击菜单"测量/计算...(Measure/Calculate...)" 或在测量上双击, 就会创建一个计算. 如果选中了测量和计算, 菜单选项会打开与选择相关的计算, 而如果没有选择, 就打开一个空的计算. 双击方法打开与你双击对象相关的计算. 在任何一种情况下, 你都可以在计算的编辑窗口中输入公式. 如果在已有的计算上双击, 一个计算编辑窗口会打开, 让你编辑这个计算.

计算编辑器的恢复操作栈与KSEG主窗口的恢复操作栈是完全独立的, 当计算编辑器窗口关闭后, 操作记录就消失了.

在计算编辑器中, 你可以输入数字, 常用算术运算符, 可以在工具栏中选择求根, 指数, 分数 (或者使用快捷键CTRL+2, CTRL+6, CTRL+/). 你还可以用下面的函数:

sqrt, log, exp, floor, ceil, fabs, sin, cos, tan, sinh, cosh, tanh, asin, acos, atan, asinh, acosh, atanh

注意上面这些函数用的是弧度, 而不是测量和变换中使用的角度. 我知道这很差劲, 但解决的 唯一途径是增加单位支持.

最后, 当计算编辑器打开时, 你还可以引用其它的测量或计算, 只需要在它们上面双击.

我必须说的是, 这部分是我最不喜欢的. 没有基本的单位支持, 计算也很土. 而且公式的代码 很丑陋, 很迟钝(还可能有bug).

返回顶部

## 编辑/重约束(Editing and Reconstraining)

### 修改显示和标签(Appearance Modification and Labels)

你可以通过"编辑/颜色(Edit/Color)", "编辑/线型(Edit/Linestyle)", "编辑/点型(Edit/Pointstyle)", 和"编辑/字体(Edit/Font)"定制你所选中的对象的外观. 如果不选择对象而进行定制, 将会影响默认的风格. 颜色, 字体等设置都不在工具栏中, 但你可以 点击相关菜单最顶部的虚线, 将菜单拉出来, 作为工具栏使用.

点和各种曲线都有标签, 但默认不显示. 你可以选择对象, 点击"编辑/显示标签(Edit/Show Label(s))" 使它的标签显示. 选中对象点击"编辑/更改标签(Edit/Change Label)", 或者在标签上 双击, 就能够修改标签. 还能在标签中使用下标和上标, 及其它的东东, 如果你指出来的话 ;-) (译者: 我偷偷告诉你几个吧:P CTRL+2 输入根号, CTRL+3 矩阵, CTRL+4 积分符号, CTRL+5 求和符号, CTRL+6 上标, CTRL+8 连乘符号, CTRL+- 下标 ... 自己慢慢摸索吧) 你还可以拖动标签相对它所指的对象移动.

### 重约束(Reconstraining)

没有什么比花了半小时煞费苦心地作了个图, 却发现开始的时候就犯了个小错误更讨厌的了. KSEG的重约束机制能让你轻松地修正它. 要重新约束一个点, 可以按住 CTRL 键, 用左键拖动点, 移动到想被约束的对象上, 释放鼠标, 它就被约束到那个对象上了. (译者: 就是把原来的"父母"对象换成另外的对象, 称作"过继"可能 更合适些:P)

例如, 假设你创建了一个三角形ABC, 经过一番操作还没有找到它的中心, 于是决定 研究一下当ABC等腰时的特点. 为了使AB=BC, 以B为圆心画过 A的圆. 然后按住 CTRL 键, 将C点拖动到圆上, 释放鼠标后, 点C 就被约束到圆上了(以圆为"父"了), 三角形也变成了等腰的了. 如果想让三角形ABC再次 变成任意的, 按住 CTRL 键, 将点C拖动到空白处释放鼠标就好了(C就变成"孤儿"了).

因此:

- 按住 CTRL 键并拖动一个点, 会立刻使该点自由.
- 将点拖动到空白处释放鼠标, 该点将保持自由.
- 将该点拖动到曲线上释放鼠标, 该点将被约束到该曲线上.
- 将点拖动到两条曲线的交点上, 将使该点被约束到该交点上.
- 将该点拖动到另外的点上会使这两个点合并. 实际上在程序内部, 这个点就消失了, 它的所有后代都被约束到另外的点上了.

所有的这些动作显然可以通过 CTRL+Z("编辑/恢复操作(Edit/Undo)")恢复. 状态栏会 尽力告诉你当你拖动点的时候会发生什么.

有时候KSEG可能不让你作你想要的重约束. 这是有原因(当然也不排除是bug干的)的: 你不能将点重约束到它的后代上去(不能搞错辈分!). 如果重约束一个点时, 会破坏一个轨迹上的 被驱动点对其驱动器的依赖关系, 你也不能重约束它(你同样不能重约束轨迹的驱动器点). 还有, 在作图器中有复杂的规则确保重约束不会扰乱作图器. 例如, 你不能重 约束一个"给定"点到一个"最终"曲线. 如果你发现KSEG允许你重约束, 却把作图器 弄错了, 请告诉我.
返回顶部

## 视图和图像输出(Views and Image Exporting)

### 视图平移和缩放(View Panning and Zooming)

为了能更好的观察你的图, KSEG能够缩放或者移动图. 缩放, 点击"视图/缩放(View/Zoom)". 鼠标的光标将变成放大镜的形状(在草图区域). 按下鼠标左键并上下拖动, 将放大或缩小图形. 缩放是以 鼠标所在的点为中心的. 释放鼠标后, 光标恢复原状. 当前的放大率会一直在状态栏上显示. 但是不管什么样的放大率, 点大小, 线的粗细和字体大小都不会变化. 平移的做法和缩放一样-- 点击"视图/平移(View/Pan)", 按下鼠标左键并拖动. 或者, 不用点击菜单, 按下鼠标中键 (如果你有的话)就可以拖动平移.

如果点击"视图/适应窗口(View/Zoom To Fit)", KSEG会自动平移和缩放, 使图恰好填满视窗. 如果点击"视图/原始缩放(100%)", KSEG会将放大率设置为100%, 并将图形平移到初始位置.

### 多视图(Multiple Views)

点击"视图/新建视图"可以为当前文档创建另一个视图(在另外的窗口中). 在一个视图中平移和缩放 不会影响到其它的视图, 但是修改文档或选择对象会反应到本文档的其它视图中. 所以你在一个视图中 拖拽一个点, 你能看到其它的视图都有响应. 视图的用处是, 例如可以在一个视图中对付草图的 一小部分(或者在一个放大的视图中作出完美的动作), 而同时在另外的视图中观察整个草图的反应.

### 输出图像(Image Exporting)

可以把当前视图中的内容输出到图形文件中(包括常用的几种格式). 只需点击"文件/输出为图像 (File/Export To Tmage...)". 然后就会出现一个对话框让你选择文件格式及是否使用 高质量格式. 点击确定后在弹出的对话框中输入文件名再确定就好了. 保存图像的大小和视图的 大小是一样的.

如果选择了"高质量图像", KSEG需要更长的时间输出, 但图像会被反锯齿化(antialiased) 并以亚像素的分辨率绘制. 该选项对制造网络图片非常有用, 但是打印出来却很糟糕(比低质量 的更差劲). 而且, 当输出黑白图片时, 千万不要用高质量的设置(但是灰度图却很好)--非常糟糕. 使用低质量模式比较保险, 因为图形在屏幕上是什么样, 输出的图像就什么样.
返回顶部

## 作图器(Constructions)

作图器(Constructions)大概是KSEG的最强大的特性了. 一个作图器(Construction) 就象一个普通的 KSEG草图, 不同的是它可以自动制作另外一个KSEG草图(或作图器(Construction)). 首先看 一个简单的例子:

### 走马观花看外接圆的例子(Circumcircle Example Walkthrough)

这部分将带你过一下例子 circumcircle.sec. 在这个过程中, 我会解释每一步的含义. 这个作图器(Constructions)会绘制一个通过三个给定点的圆.

1. 新建作图器(Constructions): "文件/新建作图器(File/New Construction)".
2. 创建三个点A, B, C. 这三个点将作为 Construction 中给定的点.
3. 选择A, B, C, 点击"作图器/设为给定(Construction/Make Given)", 将它们设为"给定". 这是告诉KSEG这三个点在自动作图时是给定的.
4. 创建线段 AB, BC及它们的中点 D, E.
5. 过D作AB的垂线, 过E作BC的垂线. 创建它们的交点F. 这是三角形ABC的外接圆圆心.
6. 现在作以F为中心过A的圆, 这就是所求的外接圆.
7. 选中除外接圆及三个给定点外的对象, 点击"编辑/隐藏对象(Edit/Hide Objects)" 将它们隐藏. 这么做的目的是在自动作图的过程中, 我们不想看到中间生成的对象出现, 我们就想 要外接圆.
8. 大功告成! 创建一个新的草图(点击"文件/新建草图(File/New Sketch)")来测试 这个作图器吧. 在新草图中创建三个点, 选中它们后点击"自动作图/未命名"(假设你没有 保存刚才的作图器). 一个外接圆立刻就出现了!

### 非递归作图器(Non-Recursive Constructions)

作图器的大部分功力来自于递归. 非递归的作图器非常简单-- 上面外接圆的例子涵盖了差不多所有的东东了. 下面还有点细节(对递归作图器同样适用)

- 有"父母"的对象可以被标识为给定. 在这种情况下, 记住通常不要创建没有用处的"父"对象. 这种对象会在作图命令列表中被标记为"(未创建)".

  从技术上说, 规则是这样的: 将"父子"关系看成是对象的有向图. 如果在有向图中, 每条从 A出发指向无"后代"对象的路径中至少有一个给定对象, 那么A不能被创建.

- 定义轨迹所必须的对象不能被指定为给定. 例如, 不能将驱动器点指定为给定, 因为在 用作图器自动作图时不允许给定点被约束与曲线.
- 不同类型的对象也可以相互设为给定. 如在一个作图器中, 创建线段S, 设为给定, 再在它上面创建一个点, 然后在另外的草图中选中一个圆弧, 圆, 射线, 直线或线段, 回放刚才的 作图器, 一个点就出现在所选的对象上了. 但是, 如果你在作图器中创建的是一个 S的垂线, 就不将这个作图器应用到圆或圆弧上.

  将所选对象与给定对象匹配的算法不是那么简单的(但在理论上还不是很好). 首先要试着将所选 对象的顺序与给定对象的顺序匹配. 如果不行, 再试着搜索(也许应该用二分法搜索的, 但还有更重要的 功能要实现, 这个先放放吧). 有时候可能所选对象和给定对象不能匹配, 但实际上能匹配(自动作图 菜单中的对应子菜单项被禁用). 在这种情况下, 使用另外的顺序选择对象, 尽量和给定对象的顺序一致.

- 没有被设为给定的自由点(还有测量和计算)会被随机放置.约束到曲线上的点也被放置到该 曲线上的随机位置.
- 快速自动作图是个非常有用的功能, 通过它可以使用你常用的作图器库. 打开菜单 "自动绘图/快速自动绘图/切换目录...(Play/Quick Play/Change Directory...)", 选择 存放你最爱的作图器的目录, 然后在你当前的文档中选择一些和你想用的作图器中的给定对象对应 的对象, 点击"自动作图/快速自动作图/作图器文件名(Play/Quick Play/ConstructionFilename.sec)", 就能用这个昨天作图了, 而不用打开它. 为了这么做, KSEG搜索该目录中的作图器, 将给定对象 与所选对象匹配的作图器在菜单中激活.
- 保存为作图器使你能够将一个草图变为作图器. 这在你作草图的时候发现某些作图步骤可以应用在 其它的作图中的时候非常有用, 只需要点击"文件/另存为作图器(File/Copy As Construction)", 包括当前草图中所有对象的作图器文档就打开了. 你可以将不需要的对象删除, 设置给定对象, 就可以 将这个作图器用在其它作图中了.

### 递归作图器(Recursive Constructions)

作图器最酷的用法就是递归了. 这个功能可以创建出分形图, 也可以重复多次地自动作图. 举个简单的例子, 看看 tractix.sec(用一段短线段和30左右的递归次数). 复杂的 例子(多个递归分支)见 dragn.sec, 创建了一个分形.

当你插入了循环"对象"到作图器中, 它就变成了递归作图器(循环对象不是真正的几何对象, 当它们是而已). 插入循环的方法是: 选择几个与给定对象匹配的对象, 点击菜单"作图器/循环 (Construction/Recurse)". 循环告诉KSEG, 当作图器中的其它步骤完成时, 对这几个对象 进行重复前面的作图命令. 当然KSEG不会永远循环下去--当你用递归作图器自动作图时, KSEG会问你最大循环 次数. 要小心--如果你的循环次数大于1, KSEG创建的对象数量是循环次数的指数倍, 换句话说, 循环 次数尽量小一些. 在我的老的350mhz电脑上, KSEG大概能轻松得处理100000个对象--我想这 足够对付任何情况了.

要记住一旦你在作图器中插入了循环, 给定对象就不能再改了(不能标记新的给定对象, 不能将已设定的 给定对象设为普通, 删除一个给定对象就会一块删除所有的循环, 等等). 这么做是为了防止循环无效. 要改变给定对象, 删除循环先.

在递归作图器中还可以将对象设为"最终(Final)"或"初始(Initial)". 终极对象顾名思义是在循环 到最后一层时才创建. 这在很多情况下都有用, 特别是在分形图中只显示最高级的细节的时候--看 dragon.sec 和 sierp.sec. 最终对象的子对象也是在循环的最后一层才创建的 -- 它们在作图动作 列表中被标记为"最终(Final)".

初始对象要复杂些--它是一个"高级"功能. 它并不是非常强大, 但它有一些奇特的效果, 有时候很 难描述. 初始对象只创建一次(在顶级循环中, 即第一次). "父"对象都是初始对象(或隐式的初始对象)时, 它 就是隐式初始对象, 在作图动作列表中被标记为"初始". 为更好地理解, 看一些例子 sierp.sec: 先正常回放(注意看三角形的最长边只创建了一次), 任何在初始线段 s_9 上作一个点 P, 作线段 PC(从点 P 到给定点 C). 再次回放并观察效果. 初始对象的使用可以节约内存(象 koch.sec), 也可以用它们作出特别的效果.

在递归作图器中, 当处理 最终/给定/初始 对象时, KSEG尽量避免错误或无用的设置, 如初始或 给定对象有"父"对象是最终的. 可能这么做看上去没什么, 但通常它都是正确的(如果你发现了例外, 请email我, 将正确的作图器和错误动作的描述告诉我).

译者的补充: 前面提到, 作图器就是一个作图程序, 而给定对象就相当于这个程序的输入参数. 因此用作图器自动作图时, 要现选定给定对象, 所选择的对象要和作图器的给定对象(输入参数) 相匹配, 而且其顺序也会影响作图. 在递归作图器中, 循环就类似于其它程序语言中的函数的递归 调用, 将作图器中的作图指令(作图函数)重复调用, 不过函数的参数不是给定对象了, 而是其它的 对象(因此在设置循环时, 选择的对象也要与给定对象相匹配).

返回顶部

Ilya Baran
ibaran@mit.edu
http://www.mit.edu/~ibaran/