管 皓,秦小林*,饒永生,曹 晟
(1. 中國科學院大學計算機科學與技術學院,北京100049; 2. 中國科學院成都計算機應用研究所,成都610041;3. 廣州大學計算科技研究院,廣州510006; 4. 電子科技大學信息與軟件工程學院,成都610054)
(?通信作者電子郵箱qinxl2001@126.com)
動態幾何軟件用于在計算機上交互地繪制幾何圖形,構造約束關系。在計算機屏幕上做出的幾何圖形,如果在變化和運動過程中能保持其幾何關系(如線段的長度相等,相互垂直、平行等)不變,就叫動態幾何圖形。有關動態幾何圖形的理論和應用的學科,就是“動態幾何”[1]。在數學教學過程中運用諸如動態幾何軟件的信息技術,可構建形象靈活的可操作工作環境,從而提高思考層次,獲得更好解決問題的技能[2]。有相關實驗表明在學習幾何知識時,與動態幾何軟件進行交互探索有利于降低學生學習過程中的認知負荷,提升學習效果[3]。
Cabri 是最早出現的動態幾何軟件。20 世紀80 年代在美國國家科學基金支持下,設計并研發了幾何畫板(The Geometer's Sketchpad,GSP)。這兩款動態幾何軟件對數學教育提供了有力支持,其教育價值很快得到了世界各國的肯定。爾后,歐美等發達國家研發了數十種動態幾何軟件[4],代表性的軟件包括:GeoGebra、Cinderella 等。從20 世紀90 年代開始,國內學者為我國基礎數學教育研發了超級畫板(Supper SketchPad,SSP),對動態幾何軟件的設計和實現也做了大量工作[5-8],其教育價值也得到了充分的挖掘和研究,對于推動學科信息化起到了重要作用。
動態幾何軟件經過30 年多的發展,研究重點大多在其數學及算法基礎理論[9-10]、交互設計[11]、應用實證[12-13]等方面。至今尚未從領域工程角度對其進行討論設計,導致上述得到的模型不能完整有效地反映動態幾何領域,使得大多的動態幾何軟件局限于特定的操作系統及終端設備。復用是軟件開發過程中重要的原則,然而缺乏對領域內可復用的抽象描述,往往只能在構建級或代碼級等較低層次進行,無法保證用戶概念模型、設計模型與系統實現的統一。亟須使用相應的軟件方法對動態幾何類軟件進行分析設計,對其合理地分層以支持可持續穩定演進,以適應不斷更新的技術環境及應用場景。從基礎圖形中,再不斷往下派生出由不同幾何約束定義的子類,子類包含了幾何約束信息及其求解算法,例如中點、兩條直線的交點等。當鼠標拖動自由對象后,通過遍歷得到與之相關聯的對象,并放進需要更新的列表中,再依次對列表中的對象進行計算更新。該過程看起來很直觀,然而實現卻頗具挑戰,文獻[23]對此做了更為詳盡的描述。
德國著名動態幾何軟件Cinderella 的作者Kortenkamp[24]拋棄了上述經典的繼承體系,在其博士論文中提出另一種面向對象的設計方法,核心模型如圖1所示。

圖1 Cinderella 核心模型設計Fig. 1 Core model design of Cinderella
如何有效利用各種Web 技術來輔助教育教學已成為了重點研究方向[14]。基于Web 技術的動態幾何軟件具有很多技術上的優勢和教育教學上的價值。早期Web 技術運行效率較低,無法滿足動態幾何密集計算的性能要求,也無法處理多媒體圖形圖像數據,需要借助Web 擴展技術或是插件。Richter-Gebert 等[15-16]研 發 的Cinderella 在 早 期 就 支 持 導 出Web 頁面可交互的動態數學內容,之后利用Java Applet 研發了交互性更好的平臺,適用于在支持Java Applet 的特定瀏覽器上運行。 GSP 也利用 Java Applet 研發出了JavaSketchpad[17],支持在Web 頁面上演示動態數學內容。另一種較為通用解決的方案是利用可縮放矢量圖形(Scalable Vector Graphics,SVG)技術,Wang 等[18]研制的GeoSVG 就利用SVG 技術在瀏覽器上實現了動態繪圖,并支持用戶創建個人的文件空間;Ehmann 等[19]利用SVG 研發了JSXGraph 動態幾何庫,基于該庫開發的Sketchometry,支持在觸碰設備上利用手勢進行繪圖,得到較為廣泛的應用。然而Java Applet 無法滿足在所有瀏覽器上運行,特別是在日益普及的各種手持設備,Oracle 公司也宣布不再維護該技術。SVG 采用XML 格式描述圖形,可利用JavaScript 語言操作文檔對象模型(Document Object Model,DOM)來操作圖形,但DOM 的操作性能較低,無法實現復雜的圖形。隨著HTML5 標準的普及,現代瀏覽器都已經支持更為高效的圖形接口Canvas,同時支持二維及三維圖形,其中三維圖形底層技術WebGL 可借助高效的GPU,達到十分可觀的性能。GeoGebra[20]利用Canvas,實現了真正意義的跨平臺、在現代瀏覽器上都能無縫運行的動態幾何軟件;Von Gagern 等[21]研發的CindyJS 是在Cinderella的基礎之上,利用WebGL 技術實現的一款高效的動態幾何庫。
在已有的研究中,雖然沒有運用到領域工程的相關方法對動態幾何軟件進行領域建模,但也從數據結構方面做了一定工作,部分反映了其領域知識。在現有動態幾何軟件中,數據結構大多都采用單一經典的面向對象繼承體系[22]。
所有的幾何對象都從基類GeometryElement 繼承派生而來。該基類包含了公有的方法和屬性,如顏色、標簽、顯示、隱藏等。由該類直接派生而來的有Point、Line、Conic 等,包含相應的幾何屬性用以表示不同類型的基礎幾何圖形:例如Point包含了坐標信息,Conic 包含了圓錐曲線的一般方程系數等。
從圖1 中可以看出兩種主要的對象:Element 與Algorithm。其中:Element 經過派生細化為PGPoint、PGLine、PGConic 等少數幾種基礎幾何圖形;Algorithm 中包含多個輸入(input)及一個或多個輸出(output)對象,描述了由輸入圖形到輸出圖形某種約束關系。相對于經典的繼承體系,將Algorithm 復合關聯至Element 中具有更高的靈活性,支持方便地實現修改某個圖形的定義。另一個好處是在性能上會有一定提升,例如InsesectLCAlgorithm 類描述了直線與圓錐曲線的交點這樣的幾何約束,該約束對應了兩個output 幾何圖形(PGPoint)。直線與圓錐曲線的交點至多有兩個,在更新兩個交點時實際上只需一次運算,這樣的設計有利于提高計算結果的重用,提高軟件的運行效率、增強穩定性。
Arango[25]提出領域的內聚性和穩定性是獲取和表示領域內可復用信息的前提。對于相關軟件系統的共性進行系統分析和利用是成功的軟件復用的基礎。目前已經出現了多種領域工程方法,適用于不同的目標、產品和過程。Kang 等[26]提出的面向特征的領域分析(Feature-Oriented Domain Analysis,FODA)方法引入特征模型用于抽象描述需求。其他諸如FOOM[27]、產品線分析(Product Line Analysis,PLA)[28]等方法,也都利用多種模型對領域內應用的共性和特性進行描述。由王千祥等[29]提出的“青鳥領域工程方法”,是一種面向對象的領域工程方法,明確規定了領域工程中各個階段的活動,并對每個階段給出操作指南。
利用領域工程的相關方法,通過特征描述、領域術語詞典、可復用構件等技術,將問題域和方法域的描述有機地結合在一起[30],在保持領域內聚性和穩定性的前提下,使系統能夠快速而準確地反映外部環境(如用戶需求、展現技術、交互方式等)的變化,保證實現系統的可用性。具體表現在以下幾個方面:劃分問題空間,降低單個系統的復雜度;建立統一的業務語言即術語庫,用于理解和消化業務知識,避免出現理解誤差;對系統進行合理的分層,隔離業務邏輯及展現層,使得系統可在保持業務邏輯不變的前提下滿足不同的設備界面布局及交互手段。
領域模型的建立分為3 個階段:用于確定領域邊界的領域分析、用于領域內問題描述的領域設計以及提供方法域上層結構描述的體系結構建模。
下面以“網絡畫板(NetPad)”為例,對基于Web 的動態幾何軟件進行領域建模。
領域分析用于確定領域邊界,具體涉及如何劃分和定義問題空間。傳統桌面應用一般以單體應用的形式研發、下載及安裝。與此不同,基于Web 的動態幾何軟件無需下載安裝,所創建的資源作品也都存儲在云端,隨時隨地都可使用分享,給用戶帶來了極大的便利。同時也給設計跟實現帶來更多挑戰,就系統復雜度而言比單體應用要復雜得多,因此在做領域設計之前,有必要對該系統涉及到的問題空間進行合理的劃分隔離復雜度,對不同的問題空間分而治之,而問題空間對應的領域設計即是對該問題空間的解決方案。經過分析識別并劃分出最基本的上下文邊界:1)身份與訪問領域。涉及到用戶訪問時,對用戶進行鑒權及身份識別,管理相關的訪問權限等問題,具有一定的通用性,因此也往往被識別為通用域,作為系統重要的基礎設施。2)資源交互領域。涉及到用戶使用動態幾何軟件制作的作品相關操作,例如作品如何存儲、分類管理、檢索、設置其他用戶對其作品的使用權限等。其涉及的問題空間并非是動態幾何軟件核心問題,但卻是整個系統十分必要的業務支撐,領域中被識別為支撐域。3)動態數學領域:動態幾何軟件為組態軟件,用戶通過類似“搭積木”的簡單方式來完成自己所需要的軟件功能,而不需要編寫計算機程序,有時候也稱為“二次開發”,組態軟件就稱為“二次開發平臺”。利用該軟件提供的工作環境,允許用戶使用軟件提供的基礎功能,或是編程接口自由組織并進行創作幾何作圖、變換等動態數學內容。該上下文對應的問題空間主要涉及到如何組織動態幾何的相關元素、幾何約束、變換等。在該系統中,應被識別是核心域,是整個系統的核心價值所在。
Norman[31]曾提出了用以描述“設計概念模型”與“用戶理解模型”之間的關系的框架,在理論上,兩個模型之間應能夠完全相互映射。領域設計是領域工程的第2 階段,此階段的主要目的是,針對領域分析獲得的領域邊界及問題空間的認識開發出相應的設計模型,并顯式地表示出來,認識并對其進行合理的領域設計是關鍵問題所在。
對于動態幾何軟件而言,其核心需求是實現二維或三維的動態圖形、解析幾何及函數曲線的繪制及變換。無論以什么樣的形式展現在用戶面前,其幾何元素及其約束關系涉及到領域模型都適用,具有在領域知識層面的復用性。動態幾何軟件都具有“拖動模式”(Drag Mode):即拖動自由元素,受約束的元素在保持其幾何約束的前提下自動求解并調整其幾何屬性。其中元素(Element)領域中的核心概念,對于建立領域知識十分必要。
經過上述分析,設計了如圖2所示的模型設計。

圖2 領域設計Fig. 2 Domain design
其 中 元 素(Element),包 括Geometry_3D_Elements、Geometry_2D_Elements、Assit_Elements,是 聚 合 約 束 關 系(Constrain)和約束對象(ConstrainObject)的聚合根,其主要目的是便于動態修改元素輸出的幾何圖元類型,當幾何圖形在退化情況下仍能夠正確定義,包含正確的幾何性質。ConstrainObject是該元素確定的具體圖形類型,該對象可細化為不同類型的幾何圖元。例如在二維中常見的幾何圖元為:點、直線、圓、圓錐曲線、多邊形、曲線等,在三維中常見的幾何圖元為點、直線、圓、平面、曲線、曲面及球、多面體等實體。Constrain 則確定了具體的幾何或代數約束,涉及到約束元素、相關參數、被約束關系及約束關系具體的計算規則等。約束關系也是動態幾何軟件領域模型中高度抽象的對象,適用于二維或三維的動態幾何模型。跟幾何圖元類型較少不同,約束關系具有更多樣性,例如在約束點的約束關系有:兩點確定的中點、線段確定的中點、三點確定的三角形的中心、圓確定的圓心,等等。設計約束關系時,應特別注意到前面所述的幾何中臨界位置時遇到的退化情況,諸如三點確定的圓當三點共線時圓即退化為直線;圓錐曲線在也可能退化為兩條直線。
當自由點經過通過或變量驅動發生變化后,系統必須將與之依賴的幾何元素的約束關系進行重新計算,在具體計算某個元素時應根據其父元素的狀態動態地選擇計算方法,并生成新的ConstainObject。這一過程反映了動態幾何軟件的核心流程。

創建出能夠處理復雜任務的軟件,需要將不同的關注點分開考慮,使設計中的每個部分都得到單獨的關注。在分離的同時,還需要維持系統內部復雜的交互關系。然而分割軟件系統有各種各樣的方式,普遍都采用分層架構,分層的價值在于每一層代表軟件中的某特定方面,這種限制使得每個方面都更具有內聚性,便于理解。
隨著技術的發展,應用于教學的各種終端設備屏幕尺寸不一(電子白板、一體機、平板電腦、智能手機等),鼠標、鍵盤、觸屏、視點等輸入設備層出不窮。如何結合不同設備特點,有針對性地設計界面展現及交互方式,實現界面與領域知識的解耦,是體系建模重要目的之一。從應用角度而言,老師用于演示與學生自主探究,也對軟件的交互方式提出了不同需求。基于前面的領域分析、領域模型設計,結合軟件分層的相關理論與技術,本文設計了如圖3所示的分層體系結構。

圖3 分層體系結構Fig. 3 Hierarchical architecture
1)UI 層(UI Layer)。負責對幾何圖形的繪制,包括二維與三維圖形;同時還應針對不同的設備(如PC、手機及平板)對界面進行合理的布局,兼容不同的交互方式(鼠標、觸屏手勢、輸入筆甚至VR 可穿戴設備)。該層次的重要性主要體現在用戶交互的便利、直觀性,旨在給用戶呈現簡潔美觀的交互界面及合理便利的交互方式。
2)應用層(Application Layer)。在動態幾何軟件中主要涉及到帶約束元素的創建、修改、刪除、復制粘貼以及這些操作的撤銷重做;標記圖形變換中心、向量及對稱軸等動態幾何中常用的功能,是為了讓變換操作更為便捷并不涉及到動態數學業務規則,因此也是屬于應用層。
3)領域層(Domain Layer)。負責表達業務概念、業務狀態信息及業務規則。領域層中的動態數學維護了動態幾何圖形及其約束關系,確定了元素的更新機制。
4)基礎設施層(Infrastructure)。為上面各層提供通用技術能力,為應用層傳遞消息,為領域層提供持久化機制等。因此基礎設施層主要包含了數據持久化、消息通信等基礎模塊,其他諸如代數運算等,為動態幾核心域提供了數值或符號運算的支持。
上述的分層方法是基于領域驅動設計的分層的經典架構,其中上層依賴于下層,其關系為直接調用;下層為上層提供必要的服務,下層無需感知上層的存在,但可以通過消息或事件等方式與上層進行間接通信。每層內的模塊劃分是基于這樣兩個依據:1)面對變化進行解耦;2)基于關注點進行內聚。
通過縱向與橫向兩個維度對復雜軟件進行解耦,可在保證穩定的前提下,持續演進。
面對不同的終端設備,為適應操作習慣和界面布局,可能需要有不同的UI層,此時僅需要調用下層提供的接口或是監聽下層的事件,對UI層進行獨立開發。
面對不同的應用場景時,也需要對功能進行合理的拆分或重組。例如在某些場景下,僅需要代數功能、2D 作圖功能或是3D 作圖,等等。通過對層次內部的模塊的抽離,剝離出不必要的模塊,再重新組合編譯,即可實現具有在特定領域的完整功能可獨立運行的軟件。
基于該領域模型,研發的基于Web 技術的動態幾何軟件“網絡畫板(Netpad)”具有多終端、高效及穩定等特點,并有效保證了該軟件持續穩定的地演進。
領域模型給出的分層結構將核心領域與UI 展現隔離開來,可以對不同尺寸設備上的展現及交互方式做針對性的設計。在PC、平板電腦屏幕空間足夠的環境下可作為創作空間,提供完整的功能組件;而在智能手機上,則以預覽體驗為主,提供有限的交互。在使用鼠標交互為主的場景中,實現鼠標雙擊、單擊、右鍵配合鍵盤操作習慣;而在觸屏設備上則又充分利用了手勢的便利性。圖4 分別給出了在PC 與智能手機環境下的布局與交互示例。

圖4 多終端的布局與交互Fig.4 Multi-terminal layout and interaction
二維與三維的動態幾何圖形,具有相同的幾何約束特點,其領域知識和模型具有統一性,主要區別在于元素的具體定義、幾何約束的實際算法及圖形繪制技術。在領域模型中,很容易復用現有的領域知識,擴展出三維幾何圖形定義及添加相應的約束算法。而體系建模給出的合理分層,將數據模型與UI層隔離,降低了耦合度。可在不影響已有的二維動態幾何功能的前提下,快速迭代和開發出三維的UI 層,實現完整的三維動態幾何工作環境。圖5 給出了基于該領域模型創建的三維動態幾何的工作環境,圖6 給出了使用該三維工作環境創建的各種有趣的案例。

圖5 三維動態幾何工作環境Fig. 5 3D dynamic geometry working environment

圖6 三維動態幾何案例舉例Fig.6 Examples of 3D dynamic geometry
動態幾何系統一個重要的應用場景是探究,通過移動自由元素探究各種不同情況下的一般規律或是特殊的臨界點。為探究在何時三角形的垂心、外心、內心共線,繪制任意三角形,并分別構造出三角形的垂心、外心和內心。
通過拖動或是動畫按鈕可方便地將一般三角形ABC變成特殊的等腰三角形,可看到此時EFD 三點共線,且由EFD 構造的三點圓退化為一條直線。
圖7 分別展示Netpad、SSP、Cinderella 對于上述構圖探究案例的實驗對比,包含起始實例,中間關鍵幀實例及終止實例。其中SSP 在三點共線時,圓EFD 無法定義;Cinderella 在三點共線時,圓EFD 出現了定義錯誤,呈現出一條水平直線。通過對比實驗,可看出利用本文提出的模型,能有效展示在臨界點時三點圓退化的情形,更好地呈現直線與圓的幾何性質的統一,有利于教學的探究和演示。

圖7 探究等腰三角形的垂心、外心、內心共線Fig.7 Study of collineation of orthocenter,circumcenter and incenter of isosceles triangle
領域模型的建立是不斷補充,不斷求精逐步演進的過程。在未來工作中,將繼續應對外部使用場景的變化、技術設備的更新,尋求更加接近事物本質的領域模型。當前已經完整實現了二維及三維動態幾何,包括平面幾何、解析幾何及函數曲線的動態繪制及其變換,支持在使用鼠標、觸屏手勢等交互,廣泛應用于數學、物理等學科教學過程中。截至目前“網絡畫板”注冊用戶超過300 000,為幾十所中小學及各大教育云平臺提供服務,已進入常規的課堂教學活動。如何結合虛擬現實、增強現實等技術,將動態幾何與沉浸式的穿戴設備結合起來,進一步輔助教育教學是后續重點研究的方向。