计算机辅助设计的几何编程
第一部分 编程和几何
第一章 介绍FL和PLaSM
本书意图描述的设计语言PLaSM是FL的一个子集的面向几何的扩展. FL是一种在函数层次 (Function Level) 上进行编程的高级语言, 由IBM位于Almaden的研究部门的函数式编程组开发.
第1.1节 符号设计编程介绍
FL语言 (可以追溯至Backus的Turing讲座 [译注: 现在有两种Turing讲座, 这个指的是Turing奖获得者给的讲座]) 引入了程序上的代数, 其中函数表达式之间的一集代数等式被建立起来.
第1.1.1小节 计算模型
程序是函数.
程序复合与应用. PLaSM程序的复合表现得恰如数学函数的标准复合. 例如, 复合数学函数应用于参数
的意思是函数先应用于, 然后函数再应用于值. 之前的表达式的PLaSM记号将会是
(f~g):xf:(g:x)
其中~代表程序复合, 而g:x代表将函数g应用于参数x.
命名对象. 在PLaSM中, 一个名字通过使用DEF被赋予每个由语言生成的值, 可以带有或不带显式参数.
DEF object = (Fun3 ~ Fun2 ~ Fun1):parameters;
参数化对象.
DEF object (params::IsSeq) = (Fun3 ~ Fun2 ~ Fun1):params;
DEF obj1 = object:<>;
DEF obj2 = object:<>;
第1.2节 PLaSM准备
第1.2.1小节 安装语言
软件下载
译者建议: 这部分内容有点年久失修, 建议参考PLaSM主页:
http://www.dia.uniroma3.it/plasm/
- 解释器. PLaSM解释器位于
http://www.plasm.net/download/
译者建议: 本书所用的PLaSM版本, 是基于PLT Scheme实现的, 也就是现在的Racket. 之前还有Common Lisp实现的版本, 现在还有Python实现的版本. 读者想用哪个版本就用哪个版本, 尽管我觉得每个实现都有点糟糕到离谱, 以至于让我怀疑作者是不是真读了他开头引用的Essentials of Programming Languages第一版.
- 编辑器. 译者建议: 官网上也说他实现了一个编辑器, 然而我怎么也没找到下载的地方, 建议不要关心了.
- 浏览器插件.译者建议: Flash是已经死了. SVG现在不用插件就能看. VRML格式建议下载专门软件观看.
第1.2.2小节 开始
- 打开Xplode编辑器. [译者: 白给, 啥也没有, 只能用交互体验垃圾得要死的REPL了.]
- 输入代码:
DEF mycube = CUBOID:<1,1,1> COLOR RED;
mycube;
译者建议: 这东西的REPL其实是一个PLT Scheme的REPL (是不是让人想到了LCF之于ML), 然后有一个解释过程, 接受字符串作为参数, 然后parse运行PLaSM程序. 我真的不是很能理解, 别的语言也就算了, 在Scheme里作者为什么不把PLaSM做成embedded DSL.
与语言进行交互
作者必须明白每个PLaSM源程序是一个字符串 [译者: 不明白的话, 读者都不明白如何运行这逆天语言], 即被(双)引号包裹的字符序列.
(plasm "(SQRT:3 + 10) / (3.5 * COS:(PI/4))")
第1.3节 在函数层次进行编程
第1.3.1小节 FL句法基础
原始FL对象是字符, 数字和真值. 原始对象, 函数, 应用和序列是表达式. [译注: 我又想问一下作者的编程语言到底是怎么学的了.] 序列是由逗号隔开尖括号包裹的表达式:
<5,fun>
应用exp1:exp2对于exp1和exp2求值, 然后将前者的值应用于后者的值. 注意到二元函数既可用前缀形式也可用中缀形式:1+3+:<1,3>4
函数应用是向左结合的:f:g:h(f:g):h
应用比复合绑定得更紧密:f:g~h(f:g)~h
第1.3.2小节 组合形式与函数
第1.4节 PLaSM编程基础
第1.5节 几何运算符
第1.6节 例子
第1.7节 带注解的参考 (Anotated references)
第二章 几何编程
第2.1节 基本编程
第2.2节 基本几何编程
第2.3节 组装形状
第三章 线性代数基础
译注: 你会发现这本书的数学都有点奇怪, 因为作者倾向于将具体和抽象杂糅在一起.
第3.1节 向量空间
一个域上的向量空间是一个集合, 其带有两种复合规则 (即运算)
满足以下公理 [译注: 这应该都是常识, 我就不翻译了]:
例子3.1.1. 实矩阵的向量空间. 令表示域上的矩阵的集合. [译注: 何以成为向量空间的部分应该是常识, 我就不翻译了.] 记号:
定义. 子空间. [译注: 定义没什么好写的了.] 的子空间的余维数 (codimension) 被定义为. 显然两个子空间的交仍然是子空间. [译注: 实际上不必限于有限的情况, 无限的情况也可以.]
定义. 线性组合.
第3.2节 仿射空间
一个点的集合被称为是上的一个仿射空间, 如果存在一个映射
满足以下性质:
定义. 正组合. [译注: 这里的术语是positive combination, 实际上更多人将其称为conical combination, 锥组合.] 对于和, 向量
被称为这些向量的正组合. 的所有正组合构成的集合被称为其正包 (positive hull), 记作. 这个集合也被称为由这些元素生成的锥.
定义. 仿射组合. 令和满足. 点
被称为点的一个仿射组合. 的所有仿射组合构成了一个仿射空间, 记作. 很容易验证:
定义. 凸组合. 令和满足. 点
被称为点的一个凸组合.
第四章 多面体几何基础
第4.1节 基本概念
定义. 拓扑.
第五章 微分几何基础
第5.1节 曲线
第二部分 图形学
第六章 仿射变换
第七章 几何原语
第八章 层次结构
第九章 图形管线
第三部分 建模