计算机辅助设计的几何编程

第一部分 编程和几何

第一章 介绍FL和PLaSM

本书意图描述的设计语言PLaSM是FL的一个子集的面向几何的扩展. FL是一种在函数层次 (Function Level) 上进行编程的高级语言, 由IBM位于Almaden的研究部门的函数式编程组开发.

第1.1节 符号设计编程介绍

FL语言 (可以追溯至Backus的Turing讲座 [译注: 现在有两种Turing讲座, 这个指的是Turing奖获得者给的讲座]) 引入了程序上的代数, 其中函数表达式之间的一集代数等式被建立起来.

第1.1.1小节 计算模型

程序是函数.

程序复合与应用. PLaSM程序的复合表现得恰如数学函数的标准复合. 例如, 复合数学函数fg应用于参数x(fg)(x)f(g(x))的意思是函数g先应用于x, 然后函数f再应用于值g(x). 之前的表达式的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:<p1,p2,,pn>;
DEF obj2 = object:<q1,q2,,qn>;

第1.2节 PLaSM准备

第1.2.1小节 安装语言
软件下载

译者建议: 这部分内容有点年久失修, 建议参考PLaSM主页:

http://www.dia.uniroma3.it/plasm/
  1. 解释器. PLaSM解释器位于
    http://www.plasm.net/download/
    译者建议: 本书所用的PLaSM版本, 是基于PLT Scheme实现的, 也就是现在的Racket. 之前还有Common Lisp实现的版本, 现在还有Python实现的版本. 读者想用哪个版本就用哪个版本, 尽管我觉得每个实现都有点糟糕到离谱, 以至于让我怀疑作者是不是真读了他开头引用的Essentials of Programming Languages第一版.
  2. 编辑器. 译者建议: 官网上也说他实现了一个编辑器, 然而我怎么也没找到下载的地方, 建议不要关心了.
  3. 浏览器插件.译者建议: Flash是已经死了. SVG现在不用插件就能看. VRML格式建议下载专门软件观看.

第1.2.2小节 开始

  1. 打开Xplode编辑器. [译者: 白给, 啥也没有, 只能用交互体验垃圾得要死的REPL了.]
  2. 输入代码:
    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对于exp1exp2求值, 然后将前者的值应用于后者的值. 注意到二元函数既可用前缀形式也可用中缀形式:
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节 向量空间

一个域F上的向量空间V是一个集合, 其带有两种复合规则 (即运算)+:V×VV,:F×VV满足以下公理 [译注: 这应该都是常识, 我就不翻译了]:

例子3.1.1. 实矩阵的向量空间.Mnm()表示域上的m×n矩阵的集合. [译注: 何以成为向量空间的部分应该是常识, 我就不翻译了.] 记号:M1m()=m,Mn1()=n,Mnm()=nm
定义. 子空间. [译注: 定义没什么好写的了.] V的子空间U的余维数 (codimension) 被定义为dimVdimU. 显然两个子空间的交仍然是子空间. [译注: 实际上不必限于有限的情况, 无限的情况也可以.]
定义. 线性组合.

第3.2节 仿射空间

一个点的集合A被称为是V上的一个仿射空间, 如果存在一个映射A×VA,(x,v)x+v满足以下性质:

定义. 正组合. [译注: 这里的术语是positive combination, 实际上更多人将其称为conical combination, 锥组合.] 对于v0,,vdnα0,,αd0, 向量α0v0++αdvd=i=0dαivi被称为这些向量的正组合. {v0,,vd}的所有正组合构成的集合被称为其正包 (positive hull), 记作pos{v0,,vd}. 这个集合也被称为由这些元素生成的锥.
定义. 仿射组合.p0,,pd𝔼nα0,,αd满足α0++αd=1. 点i=0dαipi=p0+i=1dαi(pip0)被称为点p0,,pd的一个仿射组合. {p0,,pd}的所有仿射组合构成了一个仿射空间, 记作aff{p0,,pd}. 很容易验证:aff{p0,,pd}=p0+lin{p1p0,,pdp0}.
定义. 凸组合.p0,,pd𝔼nα0,,αd0满足α0++αd=1. 点α0p0++αdpd=i=0dαipi被称为点p0,,pd的一个凸组合.

第四章 多面体几何基础

第4.1节 基本概念

定义. 拓扑.

第五章 微分几何基础

第5.1节 曲线

第二部分 图形学

第六章 仿射变换

第七章 几何原语

第八章 层次结构

第九章 图形管线

第三部分 建模