專利名稱:一種圖形動態(tài)關(guān)系識別方法
技術(shù)領(lǐng)域:
本發(fā)明屬于教學(xué)自動化技術(shù)領(lǐng)域,特別是涉及一種圖形動態(tài)關(guān)系識別方法。
背景技術(shù):
當(dāng)前交互式電子白板已逐步應(yīng)用于現(xiàn)代化的課堂教學(xué)環(huán)境,它不同于傳統(tǒng)課堂的 黑板,具有交互式強、支持隨手繪圖、易編輯等特征。交互式電子白板可以與電腦進行信息 通訊,將電子白板連接到計算機,并利用投影機將計算機上的內(nèi)容投影到電子白板屏幕上, 在專門的應(yīng)用程序的支持下,可以構(gòu)造一個大屏幕、交互式的協(xié)作會議或教學(xué)環(huán)境。利用特 定的電子白板筆代替鼠標(biāo)在白板上進行操作,可以運行任何應(yīng)用程序,可以對文件進行編 輯、注釋、保存等在計算機上利用鍵盤及鼠標(biāo)可以實現(xiàn)的任何操作。目前,電子白板正逐漸步入課堂教學(xué)。其中,在初等幾何教學(xué)中,超級畫板等工具 已經(jīng)逐漸得到應(yīng)用。但是,此類工具依舊采用鼠標(biāo)+鍵盤的輸入方式,對于基于電子白板筆 的繪制方式支持不足。因此,有必要研制一種新的支持手繪圖形輸入及關(guān)系識別的方法,針 對初等幾何教學(xué)中圖形輸入的以下特征(1)點、線、圓、多邊形是最基本和常用的圖形,其 中,多邊形可以認為是多條線的集合。(2)課堂教學(xué)通常需要連續(xù)做圖,然后由多種圖形組 合完成某種教學(xué)實例的講解,在連續(xù)做圖中,需要進行動態(tài)關(guān)系識別以保障圖形在電子課 件中保持特定的關(guān)系。但是,當(dāng)繪制某些特定特征的圖形,如垂線、中線、切線等,采用手繪 的方式難以準(zhǔn)確定位圖形間的相互關(guān)系。比如手繪圓的切線,存在誤差不能正好相切。為了達到精確繪制幾何圖形的目的,現(xiàn)有的繪圖工具軟件通常采用預(yù)先設(shè)定繪制 的類別,然后采用菜單或工具欄的外部干預(yù)的方式解決。但是,如果在手繪方式中采用這種 思想實現(xiàn),將會使繪制過程離散化,也無法體現(xiàn)電子白板筆繪制的方便、快捷的優(yōu)勢。目前有出現(xiàn)一類手繪圖形識別軟件,例如Finite State machines,能夠識別手繪 輸入內(nèi)容代表的基本圖形類別,即在人工輸入后自動判斷是否為點、線、圓,有些軟件還自 動識別出多條線構(gòu)成的多邊形,然后把不規(guī)整的圖形自動規(guī)整化。這種圖形識別一般包括 三個步驟軌跡獲取,即獲取鼠標(biāo)移動時經(jīng)過的軌跡;圖形識別,根據(jù)獲取到的軌跡判斷所 畫圖形形狀;圖形輸出,即在顯示屏幕上輸出識別出的圖形,達到規(guī)整化輸出手繪所需表達 圖形的效果。但是,圖形間的相互關(guān)系識別仍缺乏技術(shù)手段實現(xiàn)。
發(fā)明內(nèi)容
本發(fā)明目的在于針對以上不足,提出一種圖形動態(tài)關(guān)系識別方法。本發(fā)明的技術(shù)方案用于對通過鼠標(biāo)繪制輸入計算機的圖形進行關(guān)系識別,所述圖 形的種類為點、線或圓,(1)當(dāng)通過鼠標(biāo)單擊輸入計算機的當(dāng)前圖形為點時,判斷該當(dāng)前圖形下是否有在 前圖形,沒有則將該當(dāng)前圖形判斷為自由點,有則提取該當(dāng)前圖形下所有在前圖形的個數(shù), 根據(jù)個數(shù)分別進行以下處理,若該當(dāng)前圖形下有兩個在前圖形,則判斷該當(dāng)前圖形是否為在前圖形的交點,
若該當(dāng)前圖形下有一個在前圖形,則根據(jù)在前圖形的種類進行判斷,包括若在前 圖形的種類為點則判斷該當(dāng)前圖形是否為在前圖形的重疊點,若在前圖形的種類為線則判 斷該當(dāng)前圖形是否為在前圖形的線上點,若在前圖形的種類為圓則判斷該當(dāng)前圖形是否為 在前圖形的圓上點;(2)當(dāng)通過鼠標(biāo)移動輸入計算機的當(dāng)前圖形為線時,判斷該當(dāng)前圖形下是否有在 前圖形,沒有則將該當(dāng)前圖形判斷為自由線,有則根據(jù)繪制該當(dāng)前圖形時鼠標(biāo)移動的終止 點位置進行判斷,包括若在前圖形的種類為線則判斷該當(dāng)前圖形是否為在前圖形的中線或 垂線,若在前圖形的種類為圓則判斷該當(dāng)前圖形是否為在前圖形的切線。而且,在2)中,判斷當(dāng)前圖形是否為在前圖形的中線的實現(xiàn)方式為,求取繪制該當(dāng)前圖形時鼠標(biāo) 移動的起始點到在前圖形的中點的理論位置,判斷繪制該當(dāng)前圖形時鼠標(biāo)移動的終止點與 中點的理論位置是否在預(yù)設(shè)區(qū)域范圍內(nèi),是則判斷當(dāng)前圖形為在前圖形的中線,然后由繪 制當(dāng)前圖形時鼠標(biāo)移動的起始點到在前圖形的中點的理論位置自動繪制出中線,否則判斷 當(dāng)前圖形為一般線;判斷當(dāng)前圖形是否為在前圖形的垂線的實現(xiàn)方式為,求取繪制該當(dāng)前圖形時鼠標(biāo) 移動的起始點到在前圖形的垂足點的理論位置,判斷繪制該當(dāng)前圖形時鼠標(biāo)移動的終止點 與垂足點的理論位置是否在預(yù)設(shè)區(qū)域范圍內(nèi),是則判斷當(dāng)前圖形為在前圖形的垂線,然后 由繪制當(dāng)前圖形時鼠標(biāo)移動的起始點到在前圖形的垂足點的理論位置自動繪制出垂線,否 則判斷當(dāng)前圖形為一般線;判斷當(dāng)前圖形是否為在前圖形的切線的實現(xiàn)方式為,求取繪制該當(dāng)前圖形時鼠標(biāo) 移動的起始點到在前圖形的切點的理論位置,判斷繪制該當(dāng)前圖形時鼠標(biāo)移動的終止點與 切點的理論位置是否在預(yù)設(shè)區(qū)域范圍內(nèi),是則判斷當(dāng)前圖形為在前圖形的切線,然后由繪 制當(dāng)前圖形時鼠標(biāo)移動的起始點到在前圖形的切點的理論位置自動繪制出切線,否則判斷 當(dāng)前圖形為一般線。而且,先判斷當(dāng)前圖形是否為在前圖形的垂線,再判斷當(dāng)前圖形是否為在前圖形 的中線。而且,記錄判斷所得關(guān)系結(jié)果,并在移動多個在前圖形時保持關(guān)系。本發(fā)明提供的技術(shù)方案能夠在連續(xù)做圖中實現(xiàn)準(zhǔn)確定位圖形間的關(guān)系,將教師手 繪圖像轉(zhuǎn)化為準(zhǔn)確的幾何圖形方式,提高交互式電子白板的自動化程度,令教師操作方便 快捷。實際應(yīng)用本發(fā)明將具有多項優(yōu)點能夠在現(xiàn)有z+z超級畫板等圖形輸入軟件上直接 擴展定位圖形間關(guān)系功能;便于支持無線電子白板;操作符合教師輸入習(xí)慣,無需訓(xùn)練。
圖1為本發(fā)明實施例的圖形識別過程示意圖;圖2為本發(fā)明的線上點判斷示意圖;圖3為本發(fā)明的垂線繪制示意圖;圖4為本發(fā)明的切點理論坐標(biāo)求取示意圖;圖5為本發(fā)明的垂足點理論坐標(biāo)求取示意圖;圖6為本發(fā)明的繪制過程示意圖。
具體實施例方式一圖形關(guān)系分析由于多邊形為多線段的集合,因此,圖形間關(guān)系識別只需考察三種基本的圖形 點,線和圓。針對不同的圖形首先分析關(guān)系識別的基本要素。(1)點圖形識別軟件通常設(shè)定點是通過鼠標(biāo)單擊輸入計算機,一般是由用戶單擊鼠標(biāo)左 鍵,圖形輸入軟件內(nèi)置的圖形識別函數(shù)就會判斷為點。點可分為自由點,線上點,圓上點,圖 形交點,重疊點五大類,在支持動態(tài)幾何的應(yīng)用中,點屬性(不包含坐標(biāo)位置)將保持不變。自由點鼠標(biāo)左鍵在圖形輸入軟件提供的客戶區(qū)上任意空白區(qū)域按下時生成的 點。對于這類點,只需支持選擇后自由拖動。線上點鼠標(biāo)在客戶區(qū)中已有的線上(圖形輸入軟件一般提供響應(yīng)鼠標(biāo)的自動變 色顯示,例如線會變紅)時,點擊,則會生成線上點。圓上點鼠標(biāo)在客戶區(qū)中已有的圓上(圖形輸入軟件一般提供響應(yīng)鼠標(biāo)的自動變 色顯示,例如圓會變紅)時,點擊,則會生成圓上點。交點鼠標(biāo)在客戶區(qū)中已有的兩個在前圖形相交的位置點擊,則可繪制出交點,選 擇拖動相交圖形,交點會隨之改變,但保持交點性質(zhì),如果圖形不再相交,交點消失。重疊點這是種特殊情況,有可能鼠標(biāo)在客戶區(qū)中已有的點圖形上點擊,造成重 復(fù),所以繪制結(jié)果實際上合并了兩點。(2)線圖形識別軟件通常設(shè)定線是通過鼠標(biāo)移動輸入計算機,由鼠標(biāo)移動的起始點和終 止點這兩個點決定線段。用戶的操作則是按下鼠標(biāo)左鍵確定起始點位置,保持左鍵按下拖 動,松開時確定終止點位置。一般情況下,鼠標(biāo)左鍵按下拖動后抬起,如果軌跡被圖形輸入軟件內(nèi)置的圖形識 別函數(shù)判斷為線,則會在起始點位置(按下點)和終止點位置(松開點)之間作出一條線 段。線段支持選擇后改變位置及長短。為已有線段作出中線或垂線,是教學(xué)常見需求,因此 本發(fā)明提出,將線分為自由線、中線、垂線、切線和一般線,提供具體關(guān)系識別。通過多個線 段首尾相連,可以做出三角形,四邊形等多邊形。如果兩線段端點重合,圖形輸入軟件內(nèi)置 的圖形識別函數(shù)會自動將兩個點判別成一個點,這樣,三條線段構(gòu)成三角形,就會只有三個 端點。多邊形依次類推。處理時考慮構(gòu)成多邊形的線段即可。自由線鼠標(biāo)在圖形輸入軟件提供的客戶區(qū)上任意空白區(qū)域移動時生成的線。對 于這類線,只需支持選擇后自由拖動。中線是線段外一點到線段中點的連線。鼠標(biāo)左鍵按下在客戶區(qū)中拖動后,如果在 客戶區(qū)中已有的線段中點抬起,可以設(shè)定自動跳出“中點”字樣,當(dāng)圖形拖動時該中點隨在 前線段變化而變化,但總是保持中點特性不變,這樣就可以在移動多個在前圖形時(包括 已有的線段和作出的中線時)保持中線關(guān)系。垂線是線段外一點到線段上的垂直線。鼠標(biāo)左鍵按下在客戶區(qū)中拖動后,如果在 客戶區(qū)中已有的線段上垂足點處抬起,可以設(shè)定自動跳出“垂足點”字樣,當(dāng)圖形拖動時該 垂足點隨垂線的起始點一起移動,但總是保持垂足點特性不變,這樣就可以在移動多個在前圖形時(包括已有的線段和作出的垂線時)保持垂線關(guān)系。
切線是圓外一點到圓上的切線。鼠標(biāo)左鍵按下在客戶區(qū)中拖動后,如果在客戶區(qū)中已有的圓上切點處抬起,可以設(shè)定自動跳出“切點”字樣,當(dāng)圖形拖動時該切點隨切線的起始點一起移動,但總是保持切點特性不變,這樣就可以在移動多個在前圖形時(包括已有的圓和作出的切線時)保持切線關(guān)系。
一般線除中線、垂線和切線以外,于在前圖形上做的線無需特別關(guān)注。在客戶區(qū)中已有的在前圖形上抬起時,和自由線一樣生成線即可。
(3)圓
圖形識別軟件通常設(shè)定圓是通過鼠標(biāo)移動輸入計算機,由鼠標(biāo)移動的起始點位置決定圓心,由終止點位置作為圓上一點決定圓的半徑。用戶的操作則是按下鼠標(biāo)左鍵確定起始位置,保持左鍵按下拖動然后松開,根據(jù)其軌跡由相應(yīng)算法判斷出計算出圓心和半徑,然后進行做圖。
鼠標(biāo)左鍵按下拖動后抬起,如果軌跡被圖形輸入軟件內(nèi)置的圖形識別函數(shù)判斷為圓,則會根據(jù)取圓參數(shù)取得的圓心和半徑做一個圓。圓支持選擇后改變位置及大小。教學(xué)中不需要分析圓和在前圖形的關(guān)系,因此本發(fā)明不予特別處理。
圖形識別屬于現(xiàn)有技術(shù),本發(fā)明提供一種具體實施方式
以供參考,識別出點、線、圓的圖形識別函數(shù)工dentifyShape見以下偽碼說明
如果 圖形數(shù)組中的點坐標(biāo)數(shù)目為1個
{繪制圖形為點;}
或者
{
diStanCel一起始點到結(jié)束點的直線距離;
diStanCe2一圖形數(shù)組中的順序點間距離的疊加;
如果(diStanCel和diStanCe2的比小于等于門限Tho,Tho取經(jīng)驗值o.08)
{繪制圖形為線;}
或者
{繪制圖形為圓;}
}
圖形數(shù)組用于存放繪制當(dāng)前圖形時,鼠標(biāo)所經(jīng)過的點坐標(biāo),當(dāng)鼠標(biāo)單擊繪制點時,圖形數(shù)組只會存放1個點坐標(biāo)。圖形數(shù)組存放1個以上點坐標(biāo)時,繪制的當(dāng)前圖形就是線或者圓,圖形數(shù)組從起始點到結(jié)束點順序存放鼠標(biāo)移動所經(jīng)過點的點坐標(biāo),鼠標(biāo)移動所經(jīng)過點構(gòu)成點序列,按順序求取相鄰點間距離后疊加即可得到diStanCe2。實施例中,圖形識別函數(shù)工dentifyShape識別得到繪制圖形為線時,令變量Shape—o,識別得到繪制圖形為圓時,令變量Shape—l。
點、線的基本參數(shù)由相應(yīng)點的坐標(biāo)得到,為便于實施參考,提供一種現(xiàn)有技術(shù)的取圓參數(shù)提取方法如下
確定圓心和半徑的方法是先把鼠標(biāo)移動所經(jīng)過的點序列均分成三份,從每一份中任取一點,這樣就有三個點。確定這三個點構(gòu)成的圓的圓心和半徑;同理,遍歷點序列,保證每個點都參與過計算,就可以得到一組圓心和半徑的值,再從這組值中確定出最佳圓心和半徑。然后,由最佳圓心和半徑計算出圓外接矩形的左上點坐標(biāo)和右下點坐標(biāo)。關(guān)鍵步驟 詳細說明如下(1)由三點確定圓心和半徑的方法三點確定三條直線,三條直線對應(yīng)三條中垂線,三條中垂線的交點就是三點所成 圓的圓心。圓心到三點中任一點的距離就是半徑。(2)由一組圓心和半徑值確定最佳圓心和半徑的方法從這組數(shù)據(jù)中找出出現(xiàn)概率最大的圓心(cx,cy)和半徑cr。在[cx_2,cx+2]和 [cy-2, cy+2]范圍內(nèi)計算圓心與筆劃上每一點的距離,再與[cr_2,cr+2]范圍內(nèi)對應(yīng)半徑 求差值,并計算累積和。差值大表示當(dāng)前圓心和半徑與真實值接近程度低,反之則高。差值 和最小時對應(yīng)的cx,cy和cr值就是最佳圓心和半徑值。二動態(tài)關(guān)系識別根據(jù)以上關(guān)系識別分析結(jié)果,本發(fā)明提供了關(guān)系識別實現(xiàn)的技術(shù)方案,(1)當(dāng)通過 鼠標(biāo)單擊輸入計算機的當(dāng)前圖形為點時,判斷該當(dāng)前圖形下是否有在前圖形,沒有則將該 當(dāng)前圖形判斷為自由點,有則提取該當(dāng)前圖形下所有在前圖形的個數(shù),根據(jù)個數(shù)分別進行 以下處理,若該當(dāng)前圖形下有兩個在前圖形,則判斷該當(dāng)前圖形是否為在前圖形的交點,若該當(dāng)前圖形下有一個在前圖形,則根據(jù)在前圖形的種類進行判斷,包括若在前 圖形的種類為點則判斷該當(dāng)前圖形是否為在前圖形的重疊點,若在前圖形的種類為線則判 斷該當(dāng)前圖形是否為在前圖形的線上點,若在前圖形的種類為圓則判斷該當(dāng)前圖形是否為 在前圖形的圓上點;(2)當(dāng)通過鼠標(biāo)移動輸入計算機的當(dāng)前圖形為線時,判斷該當(dāng)前圖形下是否有在 前圖形,沒有則將該當(dāng)前圖形判斷為自由線,有則根據(jù)繪制該當(dāng)前圖形時鼠標(biāo)移動的終止 點位置和在前圖形進行判斷,包括若在前圖形的種類為線則判斷該當(dāng)前圖形是否為在前圖 形的中線或垂線,若在前圖形的種類為圓則判斷該當(dāng)前圖形是否為在前圖形的切線。以上技術(shù)方案可以采用計算機軟件技術(shù)實現(xiàn)自動關(guān)系識別,還可以進一步在識別 結(jié)果上自動進行相應(yīng)繪制處理,軟件流程可參見圖1 流程開始后,判斷為了將當(dāng)前圖形輸 入計算機,用戶進行的操作是鼠標(biāo)單擊還是鼠標(biāo)移動。當(dāng)用戶進行的操作是鼠標(biāo)單擊時 (即圖形數(shù)組中的點坐標(biāo)數(shù)目為1個),判斷當(dāng)前圖形下是否有在前圖形,即鼠標(biāo)單擊位置 下是否已有圖形。若沒有則判斷當(dāng)前圖形為自由點進行繪制,若有且只有一個在前圖形時, 判斷為線上點或圓上點或重疊點,若有且有兩個在前圖形時,判斷為在前圖形的交點。當(dāng)用 戶進行的操作是鼠標(biāo)移動時(即圖形數(shù)組存放1個以上點坐標(biāo)),識別當(dāng)前圖形為線或圓, 當(dāng)為圓時,直接畫圓即可。當(dāng)為線時,首先判斷當(dāng)前圖形下是否有在前圖形,即鼠標(biāo)移動的 終止點下是否已有圖形,沒有則判斷為自由線,有則根據(jù)在前圖形種類判斷,在前圖形為線 時判斷當(dāng)前圖形為中線、垂線或一般線,在前圖形為圓時判斷當(dāng)前圖形為切線。本發(fā)明實施例基于現(xiàn)有Microsoft Visual C++技術(shù)實現(xiàn),以下簡稱VC。實施例按 照應(yīng)用分類,分別進行動態(tài)關(guān)系識別的方法如下1.點繪制的動態(tài)關(guān)系識別鼠標(biāo)單擊所繪制點,主要分兩類圖形上的點和圖形外的點。圖形外的點即自由 點。其中,圖形上的點除重疊點、線上點和圓上點以外,還包含了特例——圖形的交點??紤]到用戶使用鼠標(biāo)時,未必能夠準(zhǔn)確地點擊到所需要的位置,具體實施時,需要判斷鼠標(biāo)下 點擊位置下是否有在前圖形時,可以容許一定范圍內(nèi)的差異。也就是說,繪制點的關(guān)鍵是動 態(tài)判斷發(fā)生鼠標(biāo)繪制的當(dāng)前圖形(點)在目標(biāo)上的事件和目標(biāo)的范圍。本實施例標(biāo)記為 PtInObject 函數(shù),a重疊點的PWnObject函數(shù)求鼠標(biāo)當(dāng)前點和目標(biāo)點的距離,如果距離小于6像素,認為鼠標(biāo)在目標(biāo)點上,此時 兩點合并。b線上點的PWnObject函數(shù)求鼠標(biāo)當(dāng)前點和線段兩個端點的距離(有兩個),如果這兩個距離之和減去線段 長度的差不小于0.2,則認為點在線段上。參見圖2,如果AB+AC < = BC+0. 2,則認為點A在線段BC上。c圓上點的PWnObject函數(shù)求鼠標(biāo)當(dāng)前點到圓心的距離,如果該長度處于半徑士3范圍內(nèi),則認為點在圓上?,F(xiàn)有技術(shù)中,客戶區(qū)中已有的所有在前圖形都采用VC里的對象鏈表模板類存儲。 當(dāng)用戶輸入當(dāng)前圖形時,計算機自動調(diào)用一一調(diào)取對象鏈表中所有在前圖形對象的信息, 并根據(jù)在前圖形的種類采用相應(yīng)PthObject函數(shù),判斷該在前圖形是否在當(dāng)前圖形下。由 此得到當(dāng)前圖形下有幾個在前圖形,以及這些在前圖形的種類,然后即可判定具體關(guān)系若該當(dāng)前圖形下有一個在前圖形,則根據(jù)在前圖形的種類進行判斷,包括若在前 圖形的種類為點則判斷該當(dāng)前圖形是否為在前圖形的重疊點,若在前圖形的種類為線則判 斷該當(dāng)前圖形是否為在前圖形的線上點,若在前圖形的種類為圓則判斷該當(dāng)前圖形是否為 在前圖形的圓上點。若該當(dāng)前圖形下有兩個在前圖形,則判斷該當(dāng)前圖形是否為在前圖形的交點。然 后可以判斷兩個以上圖形的形狀,做出相應(yīng)的交點,具體實施時做交點可采用現(xiàn)有技術(shù),即 采用繪制交點函數(shù)的形式,判斷當(dāng)前圖形為在前圖形的交點時調(diào)用繪制交點函數(shù)進行繪 制。用戶輸入的當(dāng)前圖形是自由點時,在客戶區(qū)直接于用戶所點擊位置顯示自由點。 而重疊點、線上點、圓上點和交點,因為容許了一定范圍誤差,并不一定是在用戶所點擊位 置顯示點,而是自行在理論位置顯示。2.線繪制的動態(tài)關(guān)系識別除了點,手繪圖形間的動態(tài)關(guān)系識別主要解決中線、垂線、切線的繪制識別,中線 的目標(biāo)點為線段上的中點,垂線的目標(biāo)點為線段上垂足所在垂足點,切線的目標(biāo)點為圓上 的切點。為判定是否達到目標(biāo)點,需要考察繪制當(dāng)前圖形時鼠標(biāo)移動的終止點位置??梢?將中點和垂足點視為特殊的線上點,將切點視為特殊的圓上點,具體實施時可以預(yù)先判定 終止點是否為線上點或圓上點??紤]到用戶使用鼠標(biāo)時,未必能夠準(zhǔn)確地點擊到所需要的 位置,具體實施時可以容許一定范圍內(nèi)的差異,在鼠標(biāo)抬起時(即鼠標(biāo)移動終止時),通過 線上點的PWnObject函數(shù)、圓上點的PWnObject函數(shù)進行判斷。實施例的基本識別步驟為2. 1鼠標(biāo)在移動時,則進行動態(tài)關(guān)系識別預(yù)處理,即是否發(fā)生鼠標(biāo)繪制的點在目標(biāo) 上的事件(即采用上述相應(yīng)的PthObject函數(shù)預(yù)先判定終止點是否為線上點或圓上點),如果“是”,則會調(diào)用vc自帶重繪函數(shù)重繪顯示設(shè)備上展現(xiàn)的客戶區(qū),而重繪的圖形默認顏 色為紅色以區(qū)別于客戶原來手繪的圖形)。這一操作是為得到關(guān)鍵點(中點等)提供函數(shù) 入口參數(shù)。2. 2鼠標(biāo)在抬起時,若圖形識別判斷出繪制的圖形為線(OnLButtonUp偽代碼3)的 結(jié)果,則按照步驟2. 3進行三類特殊點的判斷;2. 3當(dāng)在前圖形為線時,按照判斷優(yōu)先級垂線- > 中線進行關(guān)系判斷。即先檢查 鼠標(biāo)移動的終止點位置是否在垂足點的理論位置附近,然后檢查是否在中點的理論位置附 近。當(dāng)在前圖形為圓時,檢查是否在切點的理論位置附近。經(jīng)多次試驗,建議將是否位于某目標(biāo)點的“附近”的判斷門限值設(shè)置為60*60像素 的區(qū)域,即如果鼠標(biāo)移動的終止點位置的橫縱坐標(biāo)和目標(biāo)點的理論位置橫縱坐標(biāo)相差不超 過30個像素,就認為他們是同一點。將當(dāng)前點記為dqd,目標(biāo)點記為mbd,則I dgd. x-mbd. χ < =30&& I dqd. y-mbd. y < = 30,其中.χ標(biāo)識橫坐標(biāo)、.y標(biāo)識縱坐標(biāo)。具體實施時,可以 通過VC自帶的函數(shù)獲取客戶區(qū)內(nèi)目標(biāo)點的理論位置的具體坐標(biāo)。比如VC自帶的函數(shù)可以 算出從線段外某點到線段上的中點,當(dāng)用戶單擊鼠標(biāo)確定鼠標(biāo)移動的起始點時,該函數(shù)就 可以得到從起始點位置到在前圖形的中點的理論位置。具體實施時,三類線的動態(tài)關(guān)系判斷和繪制過程如下舉例所示(1)中線(一般是為三角形的某邊作中線)即過客戶區(qū)中已有的線段外一點,做該線段的中線。首先,用戶將鼠標(biāo)左鍵按下得 到線段(設(shè)為be)外的一點(設(shè)為a)作為起點。然后,當(dāng)鼠標(biāo)移動到線段be上時,該線段 be變紅,則抬起鼠標(biāo)結(jié)束繪制并進行判斷,若判斷鼠標(biāo)繪制的當(dāng)前線段的終點到達a到be 的中點d的理論位置附近,則認為用戶是在做中線。此時,跳出“中線”字樣,然后連接起點 a和中點d自動做出中線。(2)垂線即過客戶區(qū)中已有的線段外一點,做該線段的垂線。參見圖3,首先,用戶將鼠標(biāo)左 鍵按下得到線段(設(shè)為be)外的一點(設(shè)為a)作為起點。然后,當(dāng)鼠標(biāo)移動到線段be上 時,該線段be變紅,則抬起鼠標(biāo)結(jié)束繪制并進行判斷,若判斷鼠標(biāo)繪制的當(dāng)前線段的終點 到達a到be的垂足點d的理論位置附近,則認為用戶是在繪制垂線段。此時,跳出“垂線” 字樣,然后連接起點a和垂足點d自動做出垂線段。(3)切線即過客戶區(qū)中已有的圓外一點,做該圓的切線。首先,用戶將鼠標(biāo)左鍵按下得到圓 外的一點作為起點。然后,當(dāng)鼠標(biāo)移動到圓上時,該圓變紅;則抬起鼠標(biāo)結(jié)束繪制并進行判 斷,若判斷鼠標(biāo)繪制的線段的終點處于起點到圓的切點附近,則認為用戶是在做切線。此 時,跳出“切線”字樣。然后,自動連接起點和切點得到切線。3.圖形移動的動態(tài)關(guān)系識別在圖形移動時保持繪制時識別出的關(guān)系,可以在移動中保持圖形間幾何關(guān)系不 變,使演示更隨意流暢。本發(fā)明建議通過保存父子對象關(guān)系保持識別出的關(guān)系結(jié)果,父對象 決定子對象的存在,可以設(shè)定以下父子對象關(guān)系線段的父對象為線段的兩個端點,圓的父對象為圓心和圓周上一點,線上點的父 對象為線段,圓上點的父對象為圓,中點、垂足點的父對象為線外一點和線段,切點的父對象為圓外一點和圓。按照線段的父對象為線段的兩個端點的規(guī)則,中線的父對象為線外一 點和中點,垂線的父對象為線外一點和垂足點,切線的父對象為圓外一點和切點。具體實施時在程序中,每生成一個對象,就要將其加入其父對象的關(guān)聯(lián)鏈表中。圖 形間的關(guān)聯(lián)由關(guān)聯(lián)鏈表來實現(xiàn)。鏈表是VC中一種數(shù)據(jù)結(jié)構(gòu)。每繪制完成一個圖形,都要將 其和別的對象(父對象)關(guān)聯(lián),實施例標(biāo)記為函數(shù)AddAssociateObj,這個函數(shù)的作用是將 對象加入其父對象的關(guān)聯(lián)鏈表中。在圖6的具體繪制例子中,切線、垂線、切點、垂足點等都 是和D點相關(guān)的,D點是G點(切點)的父對象,D、G點又是切線DG的父對象,切線DG又 是垂足點M的父對象。當(dāng)移動組合圖形某關(guān)鍵點D時,調(diào)用D點的Moveto函數(shù)(每個圖形 都有一個Moveto函數(shù),由Visual C++自動生成相應(yīng)框架,該函數(shù)作用是移動點的位置到某 個特定值),這個函數(shù)又調(diào)用相應(yīng)函數(shù)更新所有和D點有關(guān)聯(lián)的對象,即調(diào)用與D點有關(guān)聯(lián) 的所有點的Moveto函數(shù)。大體流程是遍歷D的關(guān)聯(lián)鏈表,然后改變每個圖形的相應(yīng)位置。 這樣,移動了 D,就重新自動計算與之相關(guān)聯(lián)的所有圖形的位置,則每個圖形也就相應(yīng)的保 持動態(tài)關(guān)系不變了。三程序?qū)崿F(xiàn)流程由于具體實施時可采用Microsoft Visual C++實現(xiàn),采用函數(shù)形式提供程序代碼 可以靈活響應(yīng)客戶操作。為方便本領(lǐng)域人員實施參考起見,本發(fā)明提供了具體程序代碼設(shè) 計方案程序代碼主要反映在鼠標(biāo)左鍵按下(標(biāo)記為OnLButtonDown)、鼠標(biāo)移動(標(biāo)記為 OnMouseMove)和鼠標(biāo)左鍵彈起(標(biāo)記為OnLButtonUp)三個函數(shù)中。其他定義包括繪制中 線,切線和垂線的類主要功能及流程(分別標(biāo)記為⑶rawPointMid,OTrawPointTangent和 CDrawPointFoot)、判別兩個點的距離是否在一定得范圍內(nèi)(標(biāo)記為IdenfifSamePoint)、 跳出所畫圖形的有閃爍文字提示函數(shù)(標(biāo)記為SiowTip)。各函數(shù)基本流程說明如下1 OnLButtonDown主要功能記錄鼠標(biāo)移動的起始點,做自由點,交點、重疊點、線上點和圓上點,并 為OnLButtonUp中做中線、垂足線和切線提供依據(jù)。主要步驟流程描述如下(1)設(shè)置并保存當(dāng)前點為鼠標(biāo)移動的起始點,并清空上個在前圖形的軌跡數(shù)組 (所謂軌跡數(shù)組就是將鼠標(biāo)移動的軌跡,也就是鼠標(biāo)經(jīng)過的點保存下來,放到一個數(shù)組里 面,由OnMouseMove函數(shù)提供),設(shè)置該點狀態(tài)為新點(2)設(shè)置一變量標(biāo)記為num,變量值為當(dāng)前圖形下在前圖形的個數(shù)(3)如果 num 為 O那么為自由點,繪制該自由點,并將其(由于對象存儲在對象鏈表中,該圖形對象 用對象鏈表的指針表示)存在變量m中(用于繪制圓時)和對象firstObj (用于關(guān)系判 別)中(4)如果 num 為 1那么取得當(dāng)前圖形下該在前圖形的指針,并將其保存在對象firstObj中如果該在前圖形是線判斷當(dāng)前圖形為線上點(標(biāo)記為midpoint = 1),跳出(此次跳出而不繪制,而是 在判斷中點的時候再繪制,是中點的話就繪制中點,否則繪制線上點)。
如果該在前圖形是圓判斷當(dāng)前圖形為圓上點,繪制。將當(dāng)前圖形與圓相關(guān)聯(lián)如果不是線段或圓判斷當(dāng)前圖形為重疊點,將在前圖形的指針賦給當(dāng)前圖形(用在繪制多邊形上)(5)如果num為2,則當(dāng)前圖形為兩在前圖形的交點貝 Ij取得兩在前圖形的指針如果在前圖形之一為線且在前圖形之二為線判斷當(dāng)前圖形為線線交點并繪制如果在前圖形之一為線且在前圖形之二為圓判斷當(dāng)前圖形為線圓交點并繪制如果在前圖形之一為圓且在前圖形之二為線判斷當(dāng)前圖形為圓線交點并繪制如果在前圖形之一為圓且在前圖形之二為圓判斷當(dāng)前圖形為圓圓交點并繪制將當(dāng)前圖形和在前圖形相關(guān)聯(lián)(以便保持交點性質(zhì))2 OnMouseMove主要功能該函數(shù)的主要功能是存儲鼠標(biāo)移動的軌跡,將其放置在一個軌跡數(shù)組中,為圖形 識別提供數(shù)據(jù)依據(jù)。主要步驟(1)定義一個軌跡數(shù)組用來存儲繪圖軌跡(2)如果鼠標(biāo)按下將鼠標(biāo)經(jīng)過點的坐標(biāo)加入數(shù)組中并設(shè)置狀態(tài)為鼠標(biāo)移動3 OnLButtonUp主要功能畫線,圓;對中線,垂線,切線進行動態(tài)識別。這部分是整個程序的核 心。主要步驟(1)設(shè)置當(dāng)前點為鼠標(biāo)移動的終止點并保存(2)如果鼠標(biāo)移動而且軌跡數(shù)組里的點的個數(shù)大于五(3)那么調(diào)用圖形識別函數(shù)(Identifyaiape)來判斷圖形形狀,得到辨別圖形為直線 (shape= 0)或圓(shape = 1)(4)設(shè)置一變量,值為當(dāng)前圖形下有在前圖形的個數(shù)(此時當(dāng)前鼠標(biāo)下在前圖形 變紅)如果當(dāng)前圖形下在前圖形的個數(shù)為1且該在前圖形為線那么取進行圖形識別的兩個圖形的指針(第一個圖形針對鼠標(biāo)移動的起始點,記 為firstObj,是在OnLButtonDown中獲得的點指針;第二個圖形針對當(dāng)前圖形下在前圖形,為線或圓,此時鼠標(biāo)在其上,在前圖形保存變紅的狀態(tài))如果第二個圖形為線那么求得過點firstObj到該線的垂足點的理論位置如果求得的垂足點的理論位置和當(dāng)前點距離在預(yù)設(shè)區(qū)域范圍內(nèi)那么認為用戶是在畫垂線彈出提示,做垂足點并連接點firstObj和該垂足點的理論位置得到垂線如果第二個圖形為線那么求得過點firstObj到該線的中點的理論位置如果求得的中點的理論位置和當(dāng)前點距離在預(yù)設(shè)區(qū)域范圍內(nèi)那么認為用戶是在畫中線彈出提示,做出中點并連接點firstObj和該中點的理論位置得到中線如果第二個圖形為圓求過點firstObj到該圓的兩個切點的理論位置(分別標(biāo)記為qdl和qd2)如果qdl和當(dāng)前點距離在預(yù)設(shè)區(qū)域范圍內(nèi)那么彈出提示,做出切點qdl并連接點firstObj和該切點的理論位置得到切線如果qd2和當(dāng)前點距離在預(yù)設(shè)區(qū)域范圍內(nèi)那么彈出提示,做出切點qd2并連接點firstObj和該切點的理論位置得到切線(5)如果 shape 為 0那么取OnLButtonDown所得鼠標(biāo)移動的起始點為線段的起點調(diào)用OnLButtonDown函數(shù),取當(dāng)前點為線段的終點調(diào)用畫線函數(shù)(畫線函數(shù)是一個簡單的畫直線的類,是VC提供的現(xiàn)有技術(shù)),從起 點到終點畫線將該線加入對象鏈表中將起點和終點與線相關(guān)聯(lián)如果shape 為 1那么取得圓的圓心和圓周上的點并將其顯示出來刪除m點(OnLButtonDown取得,m點是畫圓時鼠標(biāo)一開始落下的一個點,對于畫 圓沒有用,因此為簡潔起見可以刪除)調(diào)用畫圓函數(shù)(畫圓函數(shù)是一個簡單的畫圓的類,是VC提供的現(xiàn)有技術(shù)),根據(jù)圓 心、以圓心到圓周上的點之間距離為半徑,畫圓將該圓加入對象鏈表中將圓心和圓周上的點與圓相關(guān)聯(lián)(6)設(shè)置狀態(tài)為鼠標(biāo)不移動(7)如果 midpoint 為 1 (OnLButtonDown 中獲得)取得線段的起點和終點,求得中點的理論位置如果當(dāng)前點與中點的理論位置距離在預(yù)設(shè)區(qū)域范圍內(nèi)那么做出中點并彈出提示(此次只作出一個線段的中點,而不是做中線,注意區(qū) 別)如果不在一定范圍內(nèi)
那么彈出提示并做出線上點因為教學(xué)中有指出線段中點的需要,而不一定需要做中線,中線往往只針對三角 形而做。因此,作為特殊的線上點,本發(fā)明實施例采用OnLButtonDown函數(shù)和OnLButtonUp 函數(shù)配合實現(xiàn)。在OnLButtonUp函數(shù)(7)部份中,如果當(dāng)前點與中點的理論位置距離在預(yù) 設(shè)區(qū)域范圍內(nèi)就做出中點,否則直接作出普通的線上點。4 類=CDrawPointLL, CDrawPointLC 和 CDrawPointCC主要功能這三個類的功能分別是繪制線線交點(記為OTrawPointLL)、線圓交點 (記為OTrawPointLC)和圓圓交點(記為⑶rawPointCC),以及在移動時保持交點隨圖形移 動而改變。類的構(gòu)成以⑶rawPointLL為例。在⑶rawPointL L類中包括構(gòu)造函數(shù)以及成員 函數(shù)ktDatas、ResetPosition和Movel^o。其中ktDatas函數(shù)的作用是根據(jù)兩個相交線 段的數(shù)學(xué)表達式求出交點(解方程組即可),MoveTo和ResetPosition的作用是在相交直 線的位置改變后重新計算交點坐標(biāo),從而保證交點隨著相交直線的移動而改變。5 類CDrawPointLine 禾口 CDrawPointCircle主要功能繪制線上點和圓上點,以及在移動圖形時保持線上點(圓上點)隨線 (圓)改變而改變。類的構(gòu)成以⑶rawPointLine為例,該類包括成員變量m_dLambda,構(gòu)造函數(shù)以及 成員函數(shù)ktLambda,MoveTo和ResetPosition。其中m_dLambda是記錄線上點和線段的 比例關(guān)系,ktLambda求出該比例關(guān)系。MoveTo和ResetPosition的作用是在移動過程中 通過m_dLambda求出新的線上點,從而保證線上點在移動過程中保持比例關(guān)系不變。6繪制中點,切點和垂足點(分別標(biāo)記為CDrawPointMid,CDrawPointTangent和 ⑶rawPointR)ot)的類主要功能及步驟主要功能以⑶rawPointi^oot為例,其構(gòu)造函數(shù)的入口有兩個,分別是圖形外一 點的指針(標(biāo)記Sm_pBegin)和圖形的指針(線,標(biāo)記為m_pEnd),如圖3,即輸入?yún)?shù)為點 a的指針和線be的指針,輸出的是垂足點d。在程序中主要是通過調(diào)用它們的構(gòu)造函數(shù)完成 關(guān)鍵點的識別,這三個構(gòu)造函數(shù)類似。以垂足點為例,顯示文本指針標(biāo)記為n^strContent, 實參輸入標(biāo)記為點pPoint,線pLine (l)m_strContent ="垂足點 〃 ;m_pBegin = pPoint ;m_pEnd = pLine ;(2)調(diào)用相關(guān)計算函數(shù)用數(shù)學(xué)方法求得過點pPoint線pLine的垂足點的理論位置。⑶rawPointMid類的相關(guān)計算函數(shù)核心數(shù)學(xué)思想設(shè)中點的理論位置橫縱坐標(biāo)為m_dx和m_dy,線段起始點和終點指針標(biāo)記為m_ pBegin (橫坐標(biāo)為 m_pBegin_ > m_dx,縱坐標(biāo)為 m_pBegin_ > m_dy)禾口 m_pEnd(橫坐標(biāo)為 m_pEnd- > m_dx,縱坐標(biāo)為 m_pEnd_ > m_dy),則有m_dx = (m_pBegin_ > m_dx+m_pEnd_ > m_dx) /2 ;m_dy = (m_pB_egin_ > m_dy+m_pEnd- > m_dy) /2 ;⑶rawPointTangent類的相關(guān)計算函數(shù)核心數(shù)學(xué)思想?yún)⒁妶D4,設(shè)圓外點坐標(biāo)為(px,py),圓心(以,(^),半徑為1~,點到圓心距離為2。1進行坐標(biāo)系變換,將坐標(biāo)系原點移到圓心處(如圖4所示)
這時 px = px-cx ;py = cy-py ;2T1為圓外點和圓心連線與χ軸夾角Tl = atan(py/px),T2為圓外點、切點、圓心 的夾角 T2 = acos(r/z)。求 T2 和 Tl 的差,即 T3 = T2-T1。3則切點(處于圖中第四象限)在此坐標(biāo)系中坐標(biāo)為χ = r*cos (T3),y =-r*sin(T3)。4轉(zhuǎn)換為以前的坐標(biāo)為切點的理論位置橫縱坐標(biāo)χ = r*cos (T3) +cx, y = cy_r氺sin(T3)。CDrawPointR)ot的相關(guān)計算函數(shù)核心數(shù)學(xué)思想?yún)⒁妶D5,設(shè)點為(X,y),線段起點標(biāo)記為pBegin- > m_dx, pBegin- > m_dy),終 點標(biāo)記為 m_pEnd- > m_dx, m_pEnd_ > m_dy)。如果線段垂直于X軸,則垂足點的理論位置橫坐標(biāo)為pBegin- > m_dx,縱坐標(biāo)為如果線段垂直于Y軸,則垂足點的理論位置橫坐標(biāo)為X,縱坐標(biāo)為pBegin- > m_dy除以上線段垂直于X或Y軸的特殊情況外,一般情況下,則按以下步驟得到垂足點 坐標(biāo)1首先,如圖5所示,將坐標(biāo)原點移到點(x, y),起點變?yōu)?xl, yl),終點為(x2, y2),設(shè) kl = (y2-yl) / (x2_xl),k2 = - (x2_xl) / (y2-yl),bl = yl_xl*kl2運用相似三角形原理推導(dǎo)出垂足點的理論位置在該坐標(biāo)系下坐標(biāo)值為(bl/ (k2-kl),-k2*bl/(k2-kl))3再將bl/(k2_kl),-k2^3l/(k2_kl))變換到原坐標(biāo)下,得到垂足點的理論位置在 原坐標(biāo)系下坐標(biāo)值。7 IdentifySamePoint主要功能判別兩個點的距離是否在預(yù)設(shè)區(qū)域范圍內(nèi),是的話返回TRUE,否則返 回 FALSE.輸入當(dāng)前點(標(biāo)記為oldPoint);判斷點,即中點、垂足點或切點(標(biāo)記為 newPoint)主要流程設(shè)置一個布爾型變量dis如果(abs (oldPoint. χ-newPoint. χ) <= 30)而且 abs (oldPoint. y-newPoint. y) <=30)Dis = TRUE否則Dis = FALSE返回 dis其中.χ標(biāo)識橫坐標(biāo),.y標(biāo)識縱坐標(biāo),abs()為C++自帶的取絕對值函數(shù)。8 ShowTip主要功能跳出所畫當(dāng)前圖形的閃爍文字提示,向用戶提供關(guān)系識別結(jié)果,例如“線上點”、 “交點”、“中線”等。
輸入當(dāng)前鼠標(biāo)點位置;顯示文字字符串指針輸出無偽代碼在當(dāng)前鼠標(biāo)點的X,y坐標(biāo)各加10個像素的位置顯示字符串str等待500毫秒在當(dāng)前鼠標(biāo)點的X,y坐標(biāo)各加10個像素的位置顯示空字符串等待500毫秒在當(dāng)前鼠標(biāo)點的X,y坐標(biāo)各加10個像素的位置顯示字符串str等待500毫秒四連續(xù)手繪初等幾何圖形實例為方便了解圖形關(guān)系識別在繪制過程的應(yīng)用,本發(fā)明提供一個實例,繪制目標(biāo)是 通過圓外一點D做圓BC的兩條切線,并連接兩個切點G、K,以D、G、K三點為頂點的三角形 做三條垂線,證明它們交于一點。參見圖6 (1)當(dāng)鼠標(biāo)進行由B點到C點的移動時,通過Identifyampe函數(shù)自動識別輸入計 算機的當(dāng)前圖形為規(guī)則的圓,記為圓BC;(2)當(dāng)鼠標(biāo)點擊D點時,通過OnLButtonDown函數(shù)自動繪制點D ;(3)當(dāng)由D點拖動鼠標(biāo)至圓BC上,通過OnLButtonMove函數(shù)自動將圓BC在客戶區(qū) 的顯示顏色變紅;當(dāng)通過OnLButtonUp函數(shù)調(diào)用IdentifySamePoint函數(shù)識別出拖動鼠標(biāo)至圓BC 上的終結(jié)點為切點時,自動在切點的理論位置繪制切點G,并將切點G與圓相關(guān)聯(lián),即兩者 滿足動態(tài)幾何關(guān)系,同時通過⑶rawPointTangent函數(shù)自動繪制切線DG ;采用同樣方法繪制切線DK ;(4)從K點出發(fā),鼠標(biāo)移動至G點,通過OnLButtonMove函數(shù)自動將G點在客戶區(qū) 的顯示顏色變紅;鼠標(biāo)松開,自動繪制線GK(畫線函數(shù));(5)從D點出發(fā),鼠標(biāo)拖動至線GK,線GK變紅;鼠標(biāo)松開,當(dāng)通過OnLButtonUp函數(shù)調(diào)用IdentifySamePoint函數(shù)識別出松開時 的終結(jié)點為垂足點時,通過⑶rawPointi^oot函數(shù)自動繪制垂線DL ;采用同樣方法繪制垂線KM、GN,發(fā)現(xiàn)垂線DL、GN、KM交于一點,點擊交點標(biāo)記為0 點,通過繪制交點函數(shù)繪制0點。(6)拖動D點,觀察垂線DL、GN、KM的交點,可驗證其始終交于0點。這種動態(tài)關(guān) 系的保持為關(guān)聯(lián)鏈表應(yīng)用的具體實例。
權(quán)利要求
1.一種圖形動態(tài)關(guān)系識別方法,用于對通過鼠標(biāo)繪制輸入計算機的圖形進行關(guān)系識 別,所述圖形的種類為點、線或圓,其特征在于(1)當(dāng)通過鼠標(biāo)單擊輸入計算機的當(dāng)前圖形為點時,判斷該當(dāng)前圖形下是否有在前圖 形,沒有則將該當(dāng)前圖形判斷為自由點,有則提取該當(dāng)前圖形下所有在前圖形的個數(shù),根據(jù) 個數(shù)分別進行以下處理,若該當(dāng)前圖形下有兩個在前圖形,則判斷該當(dāng)前圖形是否為在前圖形的交點,若該當(dāng)前圖形下有一個在前圖形,則根據(jù)在前圖形的種類進行判斷,包括若在前圖形 的種類為點則判斷該當(dāng)前圖形是否為在前圖形的重疊點,若在前圖形的種類為線則判斷該 當(dāng)前圖形是否為在前圖形的線上點,若在前圖形的種類為圓則判斷該當(dāng)前圖形是否為在前 圖形的圓上點;(2)當(dāng)通過鼠標(biāo)移動輸入計算機的當(dāng)前圖形為線時,判斷該當(dāng)前圖形下是否有在前圖 形,沒有則將該當(dāng)前圖形判斷為自由線,有則根據(jù)繪制該當(dāng)前圖形時鼠標(biāo)移動的終止點位 置進行判斷,包括若在前圖形的種類為線則判斷該當(dāng)前圖形是否為在前圖形的中線或垂 線,若在前圖形的種類為圓則判斷該當(dāng)前圖形是否為在前圖形的切線。
2.如權(quán)利要求1所述的圖形動態(tài)關(guān)系識別方法,其特征在于在O)中,判斷當(dāng)前圖形 是否為在前圖形的中線的實現(xiàn)方式為,求取繪制該當(dāng)前圖形時鼠標(biāo)移動的起始點到在前圖 形的中點的理論位置,判斷繪制該當(dāng)前圖形時鼠標(biāo)移動的終止點與中點的理論位置是否在 預(yù)設(shè)區(qū)域范圍內(nèi),是則判斷當(dāng)前圖形為在前圖形的中線,然后由繪制當(dāng)前圖形時鼠標(biāo)移動 的起始點到在前圖形的中點的理論位置自動繪制出中線,否則判斷當(dāng)前圖形為一般線;判斷當(dāng)前圖形是否為在前圖形的垂線的實現(xiàn)方式為,求取繪制該當(dāng)前圖形時鼠標(biāo)移動 的起始點到在前圖形的垂足點的理論位置,判斷繪制該當(dāng)前圖形時鼠標(biāo)移動的終止點與垂 足點的理論位置是否在預(yù)設(shè)區(qū)域范圍內(nèi),是則判斷當(dāng)前圖形為在前圖形的垂線,然后由繪 制當(dāng)前圖形時鼠標(biāo)移動的起始點到在前圖形的垂足點的理論位置自動繪制出垂線,否則判 斷當(dāng)前圖形為一般線;判斷當(dāng)前圖形是否為在前圖形的切線的實現(xiàn)方式為,求取繪制該當(dāng)前圖形時鼠標(biāo)移動 的起始點到在前圖形的切點的理論位置,判斷繪制該當(dāng)前圖形時鼠標(biāo)移動的終止點與切點 的理論位置是否在預(yù)設(shè)區(qū)域范圍內(nèi),是則判斷當(dāng)前圖形為在前圖形的切線,然后由繪制當(dāng) 前圖形時鼠標(biāo)移動的起始點到在前圖形的切點的理論位置自動繪制出切線,否則判斷當(dāng)前 圖形為一般線。
3.如權(quán)利要求2所述的圖形動態(tài)關(guān)系識別方法,其特征在于先判斷當(dāng)前圖形是否為 在前圖形的垂線,再判斷當(dāng)前圖形是否為在前圖形的中線。
4.如權(quán)利要求2或3所述的圖形動態(tài)關(guān)系識別方法,其特征在于所述預(yù)設(shè)區(qū)域范圍 采用60X60像素。
5.如權(quán)利要求1或2或3所述的圖形動態(tài)關(guān)系識別方法,其特征在于記錄判斷所得 關(guān)系結(jié)果,并在移動多個在前圖形時保持關(guān)系。
全文摘要
一種圖形動態(tài)關(guān)系識別方法,用于對通過鼠標(biāo)繪制輸入計算機的圖形進行關(guān)系識別,所述圖形的種類為點、線或圓,當(dāng)通過鼠標(biāo)單擊輸入計算機的當(dāng)前圖形為點時,判斷該當(dāng)前圖形下是否有在前圖形,沒有則將該當(dāng)前圖形判斷為自由點,有則提取該當(dāng)前圖形下所有在前圖形的個數(shù),根據(jù)個數(shù)分別進行處理,識別出重疊點、線上點、圓上點;當(dāng)通過鼠標(biāo)移動輸入計算機的當(dāng)前圖形為線時,判斷該當(dāng)前圖形下是否有在前圖形,沒有則將該當(dāng)前圖形判斷為自由線,有則根據(jù)繪制該當(dāng)前圖形時鼠標(biāo)移動的終止點位置進行判斷,包括若在前圖形的種類為線則判斷該當(dāng)前圖形是否為在前圖形的中線或垂線,若在前圖形的種類為圓則判斷該當(dāng)前圖形是否為在前圖形的切線。
文檔編號G06F3/048GK102096831SQ20091027326
公開日2011年6月15日 申請日期2009年12月15日 優(yōu)先權(quán)日2009年12月15日
發(fā)明者劉清堂, 宋曉娟, 張國慶, 朱曉亮 申請人:華中師范大學(xué)