第一五七章 几何约束
1963年,i.e. sutherlachpad系统中第一个采用了用约束定义物体的方法,此法成为以后约束满足型智能ca方法的先驱。最早对智能cad的研究使用专家系统的办法。国际上最早研究智能cad的单位是美国的卡耐基梅隆大学。著名的人工智能学者h.a.simoma于20世纪70年代中期带领一批博士研究生研究住宅空间的综合。澳大利亚悉尼大学以j.s.gero教授为首的designnbspputing unit 从研究工程设计优化方法着手,于20世纪 70 年代末开始转向设计中的人工智能技术。目前,cad的研究中存在着三个前沿问题:第一个问题是解决方案的形成,第二个问题是围绕着设计对象、设计知识的表达展开的研究,第三个问题是围绕智能cad系统的自动作图功能研究,即几何约束求解。
现在陈东风和杨韦就是想要直接挑战智能cad系统这样的科技前沿,不得不说确实步子迈的有点大。
“昌宏,你说的问题我有思考过,不光是欠约束情况下全参数的方程组求解问题,还有过约束的情况,需要把相同的或者部分重叠的条件进行过滤。其实这个问题归根到底是几何约束求解的问题。这个技术不能说是先进,但是确实是几何引擎成败的关键。我决心要把几何约束的算法融合到几何引擎中。”陈东风坚定的说。
杨辉看着陈东风说:“我看这个问题不用争论了,东风你能把几何约束的算法搞出来,那么皆大欢喜,就看你有没有信心了,不过这种纯数学的问题恐怕我是帮不了你了。不过这段时间我会潜心研究c++和几何引擎的价格,等你计算出几何约束算法从而解决欠(过)约束情况下全参数方程证求解问题,那么我们就立即投入到几何引擎的编程工作中,怎么样?”
杨辉的提议是不是办法的办法,算法这个核心搞出来了,那么就成功了一半自然没有问题。如果陈东风攻克不了这个问题,那么他的提议也就是没有了价值,可能几何引擎这个项目就黄了。
想要理解几何约束求解那么就必须要了解什么是几何体。几何体的定义是一个几何图形中最基本最具有特征的几何元素。例如2维中的点、直线、线段、圆、圆弧和三维中的平面、球面、曲面等。
在几何体的定义上引申出来的几何约束的定义是,两个或多个几何体之间所具有的几何关系。例如点与点之间的距离,直线和直线之间的角度,两条直线垂直,直线与圆相切等。
陈东风自从接过几何约束的问题后,就全心全意的投入到了其中,他首先将几何形式的几何约束进行了分类,不外乎几何形式的几何约束和代数代数形式的几何约束。
几何形式的几何约束包括尺寸约束和拓扑约束。
所谓尺寸约束一般是由用户显式输入的。通常包括两点之间的距离、直线与直线之间的角度、点到直线的距离、半径约束和两条平行直线之间的距离等。
所谓拓扑约束束一般是隐含的,是由系统根据草图自动建立的。通常包括水平约、两条直线平行和垂直、三点共线、两个角相等、两个圆共心等。
根据几何约束中所涉及的几何体的个数,还可以将几何形式的几何约束分为三类。一元约束:只涉及一个几何体的约束。这类几何约束很少见,例如线段的长度就是一个一元约束。
二元约束:涉及到两个几何体的约束,大多数的几何约束属于此类。
多元约束:涉及到两个以上的几何体的约束。例如三点共线,线段的长度相等,角度相等等。
代数形式的几何约束包括方程约束和不等式约束。
方程约束:指以方程的形式给出的几何约束。例如,三角形的面积等于圆的面积。
不等式约束:有时为了表示点在几何图形中的构造顺序时会用到,例如,abca表示点a,b,c是以顺时针的顺序构造的。
以上的概念如果总结不出来,那么对于几何约束的求解基本上就是一知半解,或者说求出来也是不严谨的结果。这个就是基础理论的研究,很是花费时间但是没有什么经济效益。
用了一个多月的时间陈东风基于以上的基本概念,总结出几何约束求解的确切定义——给定一个几何体的集合o和一个关于集合o中的几何体之间的几何约束的集合c,那么二元组(o,c)也就是几何约束问题。
几何约束求解的定义清晰后,那么利用解析几何的知识,建立直角坐标系,将所有给定的几何约束转化成一系列表示几何约束的代数方程,方程中的变量表示几何体的独立参数,这样就将一个几何约束问题转化成一个非线性代数方程组的求解问题。然后,用数值计算的方法求解这个方程组,所得到的解就是几何体的位置坐标,即可以构造这个几何图形。这就是陈东风设想的基于数值计算的几何约束求解方法。
先把数值计算方法放到一边,正如唐昌宏对陈东风质疑,在实际过程中不肯能所有的约束条件都是完美的,总有欠约束或者过约束的时候。
要想提高几何约束求解的交互性和准确性必须要进行几何约束求解的定性分析——也就是欠、过和完整约束性的判定问题、参数有效范围的确定问题、多解问题、求解失败的诊断和误差的传播问题等。
陈东风要做的就是给出这样的一个欠/过约束的完整判定算法,然后在分别针对欠约束和过约束进行完善。
对于欠约束的几何约束求解问题,陈东风通过设置几何约束的优先级,给出了如何依据几何约束的优先级添加几何约束的方法,最后计算出了一个将欠约束的几何约束求解问题转化为完整约束的几何约束求解问题的算法。
对于过约束的几何约束求解问题,陈东风首先判定一个过约束的几何约束求解问题是一致性的还是非一致性的,进而针对两种不同类型,分别给出将其转化为完整约束的几何约束问题的方法,并提出了算法。
到了这一步才基本上算是完成了几何引擎中最为关键的几何约束算法,而这个时间也过去了4个月,已经到了1981年的3月份。