1963年,I.E. Sutherland在他的 Sketchpad系統中第一個採用了用約束定義物體的方法,此法成爲以後約束滿足型智能CA方法的先驅。最早對智能CAD的研究使用專家系統的辦法。國際上最早研究智能CAD的單位是美國的卡耐基-梅隆大學。著名的人工智能學者H.A.Simon和CAD學者Eastma於20世紀70年代中期帶領一批博士研究生研究住宅空間的綜合。澳大利亞悉尼大學以J.S.Gero教授爲首的Design Computing Unit 從研究工程設計優化方法着手,於20世紀 70 年代末開始轉向設計中的人工智能技術。
目前,CAD的研究中存在着三個前沿問題:第一個問題是解決方案的形成,第二個問題是圍繞着設計對象、設計知識的表達展開的研究,第三個問題是圍繞智能CAD系統的自動作圖功能研究,即幾何約束求解。
現在陳東風和楊韋就是想要直接挑戰智能CAD系統這樣的科技前沿,不得不說確實步子邁的有點大。
“昌宏,你說的問題我有思考過,不光是欠約束情況下全參數的方程組求解問題,還有過約束的情況,需要把相同的或者部分重疊的條件進行過濾。其實這個問題歸根到底是幾何約束求解的問題。這個技術不能說是先進,但是確實是幾何引擎成敗的關鍵。我決心要把幾何約束的算法融合到幾何引擎中。”陳東風堅定的說。
楊輝看着陳東風說:“我看這個問題不用爭論了,東風你能把幾何約束的算法搞出來,那麼皆大歡喜,就看你有沒有信心了,不過這種純數學的問題恐怕我是幫不了你了。不過這段時間我會潛心研究C++和幾何引擎的價格,等你計算出幾何約束算法從而解決欠(過)約束情況下全參數方程證求解問題,那麼我們就立即投入到幾何引擎的編程工作中,怎麼樣?”
楊輝的提議是不是辦法的辦法,算法這個核心搞出來了,那麼就成功了一半自然沒有問題。如果陳東風攻克不了這個問題,那麼他的提議也就是沒有了價值,可能幾何引擎這個項目就黃了。
想要理解幾何約束求解那麼就必須要了解什麼是幾何體。幾何體的定義是一個幾何圖形中最基本最具有特徵的幾何元素。例如2維中的點、直線、線段、圓、圓弧和三維中的平面、球面、曲面等。
在幾何體的定義上引申出來的幾何約束的定義是,兩個或多個幾何體之間所具有的幾何關係。例如點與點之間的距離,直線和直線之間的角度,兩條直線垂直,直線與圓相切等。
陳東風自從接過幾何約束的問題後,就全心全意的投入到了其中,他首先將幾何形式的幾何約束進行了分類,不外乎幾何形式的幾何約束和代數代數形式的幾何約束。
幾何形式的幾何約束包括尺寸約束和拓撲約束。
所謂尺寸約束一般是由用戶顯式輸入的。通常包括兩點之間的距離、直線與直線之間的角度、點到直線的距離、半徑約束和兩條平行直線之間的距離等。
所謂拓撲約束束一般是隱含的,是由系統根據草圖自動建立的。通常包括水平約、兩條直線平行和垂直、三點共線、兩個角相等、兩個圓共心等。
根據幾何約束中所涉及的幾何體的個數,還可以將幾何形式的幾何約束分爲三類。一元約束:只涉及一個幾何體的約束。這類幾何約束很少見,例如線段的長度就是一個一元約束。
二元約束:涉及到兩個幾何體的約束,大多數的幾何約束屬於此類。
多元約束:涉及到兩個以上的幾何體的約束。例如三點共線,線段的長度相等,角度相等等。
代數形式的幾何約束包括方程約束和不等式約束。
方程約束:指以方程的形式給出的幾何約束。例如,三角形的面積等於圓的面積。
不等式約束:有時爲了表示點在幾何圖形中的構造順序時會用到,例如,A<B<C<A表示點A,B,C是以順時針的順序構造的。
以上的概念如果總結不出來,那麼對於幾何約束的求解基本上就是一知半解,或者說求出來也是不嚴謹的結果。這個就是基礎理論的研究,很是花費時間但是沒有什麼經濟效益。
用了一個多月的時間陳東風基於以上的基本概念,總結出幾何約束求解的確切定義——給定一個幾何體的集合O和一個關於集合O中的幾何體之間的幾何約束的集合C,那麼二元組(O,C)也就是幾何約束問題。
幾何約束求解的定義清晰後,那麼利用解析幾何的知識,建立直角座標系,將所有給定的幾何約束轉化成一系列表示幾何約束的代數方程,方程中的變量表示幾何體的獨立參數,這樣就將一個幾何約束問題轉化成一個非線性代數方程組的求解問題。然後,用數值計算的方法求解這個方程組,所得到的解就是幾何體的位置座標,即可以構造這個幾何圖形。這就是陳東風設想的基於數值計算的幾何約束求解方法。
先把數值計算方法放到一邊,正如唐昌宏對陳東風質疑,在實際過程中不肯能所有的約束條件都是完美的,總有欠約束或者過約束的時候。
要想提高几何約束求解的交互性和準確性必須要進行幾何約束求解的定性分析——也就是欠、過和完整約束性的判定問題、參數有效範圍的確定問題、多解問題、求解失敗的診斷和誤差的傳播問題等。
陳東風要做的就是給出這樣的一個欠/過約束的完整判定算法,然後在分別針對欠約束和過約束進行完善。
對於欠約束的幾何約束求解問題,陳東風通過設置幾何約束的優先級,給出瞭如何依據幾何約束的優先級添加幾何約束的方法,最後計算出了一個將欠約束的幾何約束求解問題轉化爲完整約束的幾何約束求解問題的算法。
對於過約束的幾何約束求解問題,陳東風首先判定一個過約束的幾何約束求解問題是一致性的還是非一致性的,進而針對兩種不同類型,分別給出將其轉化爲完整約束的幾何約束問題的方法,並提出了算法。
到了這一步才基本上算是完成了幾何引擎中最爲關鍵的幾何約束算法,而這個時間也過去了4個月,已經到了1981年的3月份。