草图几何约束求解
現(xiàn)代計(jì)算機(jī)輔助設(shè)計(jì)系統(tǒng)通常依賴二維草圖為基礎(chǔ)來(lái)創(chuàng)建大多數(shù)三維幾何圖形。這些草圖中的形狀以及它們的幾何信息加上它們之間的一系列約束,被用于量化組成草圖的各個(gè)線段、圓、弧和樣條曲線的精確大小和形狀。示例約束包括總體長(zhǎng)度、對(duì)稱性、平行和/或垂直段以及圓弧半徑。對(duì)于一個(gè)給定的草圖,有許多約束集可以明確地定義該形狀。示例約束包括長(zhǎng)度、對(duì)稱性、平行或垂直線段段以及圓弧半徑。對(duì)于一個(gè)給定的草圖,有不同得約束組合可以明確地定義該形狀。但更多的時(shí)候,用戶采用的約束組合無(wú)法準(zhǔn)確定義形狀,致使與用戶的預(yù)期不符。所以用戶提供關(guān)于如何更改約束定義來(lái)補(bǔ)救該問(wèn)題的反饋就是一個(gè)棘手的問(wèn)題。本文描述了一系列幫助用戶診斷約束問(wèn)題的技術(shù)方案,通過(guò)這項(xiàng)方案向用戶提供一系列選項(xiàng),以使草圖約束問(wèn)題得到正確的處理。
一、介紹
在大多數(shù)計(jì)算機(jī)輔助設(shè)計(jì)(CAD)系統(tǒng)中,二維草圖是允許生成三維模型的基本元素。創(chuàng)建草圖的方法通常是從一般形狀開(kāi)始,然后添加一組特定的約束來(lái)生成預(yù)期圖形。草圖約束的例子有線段長(zhǎng)度、半徑、夾角、平行等。通常,用戶需要不斷對(duì)草圖中的線段、圓弧和樣條曲線等添加相互關(guān)聯(lián)的約束條件。然后,約束求解器負(fù)責(zé)更新彼此之間的幾何關(guān)系,并提供預(yù)覽效果供用戶參考。
草圖的概念起源于第一個(gè)圖形系統(tǒng),它是在20世紀(jì)50年代中期在林肯實(shí)驗(yàn)室的麻省理工學(xué)院開(kāi)發(fā)出來(lái)的。1960年,在麻省理工學(xué)院實(shí)驗(yàn)室開(kāi)發(fā)的一個(gè)叫做素描板的項(xiàng)目為CAD行業(yè)邁出了第一步。隨著時(shí)間的推移,草圖的概念與“參數(shù)化”的概念緊密聯(lián)系。自從引入?yún)?shù)化以來(lái),大多數(shù)開(kāi)發(fā)者的關(guān)注點(diǎn)都集中在集成參數(shù)化上,而很少關(guān)注幫助用戶理解如何正確地約束草圖。
本文介紹了以用戶為導(dǎo)向約束求解的一種方案。由于其純粹性使得它可以用于任何CAD系統(tǒng)的實(shí)現(xiàn)。
二、草圖求解方案
草圖是由線段、圓弧和樣條曲線組成的二維圖形。圖1顯示了由三個(gè)線段和一個(gè)弧組成的非常簡(jiǎn)單的草圖。在圖上的是幾個(gè)字母和數(shù)字,它們描述了用戶為“解決”草圖而指定的約束條件。
表1定義了草圖中這些字母的含義。表1中的“臨時(shí)固定”約束是求解器在診斷草圖時(shí)添加的臨時(shí)約束;它們將在下一節(jié)中進(jìn)一步討論。人們可能會(huì)注意到,共線點(diǎn)和共線中心在圖上都用“c”表示;區(qū)別在于共線點(diǎn)把“c”放在頂點(diǎn)上,共線中心把“c”放在弧的中心。共線性、距離關(guān)系和長(zhǎng)度關(guān)系的約束將在后面的例子中進(jìn)行解釋和證明。
由于幾乎所有的約束都引用了一個(gè)頂點(diǎn)數(shù),所以其他每個(gè)頂點(diǎn)數(shù)都被標(biāo)記在圖上,如圖1所示。請(qǐng)注意,所有的線段和線弧都使用它的起始頂點(diǎn)進(jìn)行標(biāo)記,這是通過(guò)繞著圖的逆時(shí)針?lè)较騺?lái)確定的
| X | 臨時(shí)固定 X分量 | l | 長(zhǎng)度 |
| Y | 臨時(shí)固定 Y分量 | lr | 長(zhǎng)度關(guān)系 |
| C | 臨時(shí)固定 曲率 | h | 水平 |
| x | 固定x分量 | v | 垂直 |
| y | 固定y分量 | i | 傾角 |
| p | 夾角垂直 | r | 半徑 |
| t | 相切 | T | 圓弧轉(zhuǎn)角 |
| c | 共線點(diǎn) | c | 共線中心 |
| d | 距離關(guān)系 |
表1 簡(jiǎn)易的約束對(duì)照表
根據(jù)霍夫曼和維米爾的理論,求解約束系統(tǒng)有四種基本方法:
1、數(shù)值法:基于代數(shù)方法的幾何約束求解方法,簡(jiǎn)單地說(shuō),是指首先通過(guò)建立一個(gè)坐標(biāo)系將幾何約束轉(zhuǎn)化為一組代數(shù)方程組,繼而采用數(shù)值計(jì)算的方法和符號(hào)計(jì)算的方法求解。其中Newton-Raphson 方法(簡(jiǎn)稱牛頓法)是數(shù)值計(jì)算中用得最多的一種方法。這種方法的求解速度快,但是需要一個(gè)好的初值而且對(duì)初值的選取比較感。
2、符號(hào)法:符號(hào)方法也是先將約束轉(zhuǎn)化為一組代數(shù)方程,然后采用符號(hào)推理的方法,如 Wu-Ritt分解算法或 Grobner 基方法將方程組映射成符號(hào)系統(tǒng)來(lái)實(shí)現(xiàn)非線性方程組的分解,最后采用數(shù)值方法求解。
3、規(guī)則法:阿爾德菲爾德提出的基于規(guī)則的約束構(gòu)造法,將手工繪圖的過(guò)程分解為最基本的作圖規(guī)則,運(yùn)用經(jīng)典的人工智能的符號(hào)運(yùn)算、知識(shí)表達(dá)、匹配技術(shù),采用通用的推理機(jī)進(jìn)行幾何推理與計(jì)算,從而得到滿足約束的幾何圖形。
4、圖構(gòu)造法:基于圖的求解方法首先分析約束,得到反映約束對(duì)象之間依賴關(guān)系和求解次序的約束依賴圖(簡(jiǎn)稱約束圖),然后根據(jù)約束圖進(jìn)行約束求解得到最終的設(shè)計(jì)結(jié)果。
數(shù)值法由于其通用性,是最常用的方法,是本文描述的技術(shù)的基礎(chǔ)。
殘差方程
牛頓法法是通過(guò)調(diào)整草圖的自由變量,將一組殘差R(每個(gè)殘差都來(lái)自用戶指定的約束)驅(qū)動(dòng)為零。對(duì)于圖1中的草圖,變量是x和y頂點(diǎn)位置以及弧曲率C。
xT=[x1y1x2y2x3y3x4y4C3]x^T=\begin{bmatrix}x_1&y_1&x_2&y_2&x_3&y_3&x_4&y_4&C3 \end{bmatrix}xT=[x1??y1??x2??y2??x3??y3??x4??y4??C3?]
(1)
系統(tǒng)中變量的數(shù)量決定了定義約束方程的數(shù)量,這是唯一地求解草圖和定位頂點(diǎn)坐標(biāo)所必需的。這個(gè)例子有9個(gè)變量,因此需要9個(gè)殘差方程來(lái)定義草圖。如等式(1)所示:
表2 定義殘差方程
表2中的殘差方程全部排列好,當(dāng)求解草圖并滿足約束條件時(shí),殘差將消失(為0或無(wú)限接近于0)。注意,相切函數(shù),這里沒(méi)有具體的實(shí)現(xiàn),你可以根據(jù)你自己的實(shí)際情況來(lái)定義相切方程。
牛頓方法使用了一個(gè)由?Rn/?Xn定義的雅可比矩陣。該問(wèn)題是用一個(gè)矩陣系統(tǒng)來(lái)建立的,如等式(2)所示:
(2)
通過(guò)將一個(gè)點(diǎn)(初始或當(dāng)前猜測(cè))線性化,并應(yīng)用有限差分表達(dá)式來(lái)求解雅可比矩陣中的單個(gè)項(xiàng)。通過(guò)約束公式的符號(hào)微分來(lái)直接評(píng)價(jià)導(dǎo)數(shù)是可能的,但在目前的工作中已被發(fā)現(xiàn)沒(méi)有什么好處。為了用迭代的方法求解方程組,每次迭代都更新?x向量,將R向量驅(qū)動(dòng)為零。當(dāng)R向量的最大值小于給定的公差,迭代停止,認(rèn)為求解完成。
在等式中的矩陣(2)設(shè)置的優(yōu)勢(shì)是,如果定義準(zhǔn)確,任何的問(wèn)題將被解決。
該數(shù)值方法用于尋找草圖解,因?yàn)榻o定一個(gè)定義良好的系統(tǒng)和高質(zhì)量的初始值,該方法總是會(huì)找到一個(gè)解。該系統(tǒng)的主要缺點(diǎn)是它依賴于初始條件,以及迭代方法可能會(huì)很耗時(shí)。盡管有這些缺點(diǎn),理論上用數(shù)值方法能夠解決任何定義良好的約束問(wèn)題。
三、診斷草圖問(wèn)題
為了進(jìn)一步演示,將使用圖2所示的草圖。這個(gè)草圖由8個(gè)頂點(diǎn)和三個(gè)弧的曲率定義,總共有19個(gè)變量,如等式(3)所示:
xT=[x1y1x2y2x3y3x4y4x5y5x6y6x7y7x8y8C1C2C7]x^T= \begin{bmatrix} x_1 & y_1 & x_2 & y_2 & x_3 & y_3 & x_4 & y_4 & x_5 & y_5 & x_6 & y_6 & x_7 & y_7 & x_8 & y_8 & C_1 & C_2 & C_7 \end{bmatrix}xT=[x1??y1??x2??y2??x3??y3??x4??y4??x5??y5??x6??y6??x7??y7??x8??y8??C1??C2??C7??]
(3)
此草圖使用了長(zhǎng)度關(guān)系,這是用于關(guān)聯(lián)不同長(zhǎng)度的約束條件。在這個(gè)測(cè)試草圖中,使用一個(gè)“長(zhǎng)度關(guān)系”來(lái)定義段4-5段是段6-7段長(zhǎng)度的三倍。標(biāo)簽只出現(xiàn)在圖5中(后面)關(guān)系的第一段上。
完全約束的結(jié)果如圖2所示:
用于定義此定義的約束草圖如表3所示。雖然圖2可能看起來(lái)并不復(fù)雜,但有許多不同的方法來(lái)定義草圖的約束,以得到一個(gè)完全約束的系統(tǒng),這是最終的目標(biāo)。表中顯示的約束只是完全定義所需草圖的各種方法中的一種,這將在后面詳細(xì)探討。
一個(gè)草圖可以分為四種不同的狀態(tài)之一;完全約束、過(guò)度約束、欠約束或不當(dāng)約束。一個(gè)完全約束的系統(tǒng)具有適當(dāng)數(shù)量的約束,并且是可解的,因?yàn)樵跊](méi)有奇點(diǎn)存在,這導(dǎo)致了草圖的一個(gè)明確的解決方案。過(guò)度約束系統(tǒng)有太多的約束,這些約束可能也可能不能正確地定義草圖。一個(gè)欠約束的系統(tǒng)沒(méi)有足夠的約束來(lái)唯一地定義草圖,需要繼續(xù)添加約束。不適當(dāng)?shù)募s束系統(tǒng)具有正確數(shù)量的約束條件,但可能存在相互沖突的約束條件,從而導(dǎo)致一個(gè)奇點(diǎn),而某些坐標(biāo)是不可解的。下面將描述每種情況。
欠約束 Under-Constrained
大多數(shù)CAD系統(tǒng)將識(shí)別給定草圖上的約束狀態(tài)。商業(yè)系統(tǒng)對(duì)可以添加的約束類型也有限制;因此,在ProEngen5中對(duì)草圖的定義方式和之前的定義方式略有不同。本商業(yè)包裝中沒(méi)有整體長(zhǎng)度和高度的限制。此外,要使用長(zhǎng)度關(guān)系,必須定義其中一個(gè)長(zhǎng)度,這與在我們?cè)谏厦娌輬D求解器中使用的長(zhǎng)度不同。
當(dāng)確定約束系統(tǒng)的狀態(tài)時(shí),原工程師采用了一種獨(dú)特的方法。項(xiàng)目工程師為防止草圖因其意圖而在約束下開(kāi)始。作為對(duì)象(直線、圓弧等)被添加到草圖中,添加“弱”約束,這是純粹的維度約束,創(chuàng)建和維護(hù)一個(gè)完全定義的草圖。用戶向系統(tǒng)中添加約束以創(chuàng)建所需的對(duì)象,隨著約束的添加,自動(dòng)添加的弱約束將被刪除。雖然這使復(fù)雜草圖的系統(tǒng)處于可解狀態(tài),但添加的尺寸通常不是用戶真正想要定義的,并且沒(méi)有關(guān)于可以添加哪些其他約束的反饋。使用我們?cè)谠こ處熤械臏y(cè)試形狀,完全定義的草圖如圖3所示。當(dāng)我們?nèi)サ舳?-1(底部水平段)的長(zhǎng)度時(shí),給圖4所示的形狀增加了一個(gè)新的尺寸。
在草圖求解器中,草圖是根據(jù)用戶的反饋進(jìn)行診斷和修復(fù)的,而不是像在項(xiàng)目工程師中那樣自動(dòng)修補(bǔ)。系統(tǒng)首先通過(guò)行簡(jiǎn)化雅可比矩陣來(lái)識(shí)別奇點(diǎn)的位置。對(duì)于一個(gè)定義良好的系統(tǒng),行縮減將會(huì)產(chǎn)生單位矩陣,但對(duì)于欠約束的系統(tǒng),將至少會(huì)有一個(gè)零列。奇點(diǎn)的位置,由一個(gè)零列標(biāo)識(shí),顯示了哪個(gè)參數(shù)是未定義的。
草圖求解器會(huì)暫時(shí)為缺失的參數(shù)添加一個(gè)固定點(diǎn),并再次檢查該矩陣。之所以使用這種迭代方法,是因?yàn)樗锌赡茉诩s束系統(tǒng)中普遍存在多個(gè)問(wèn)題。如果矩陣只有一個(gè)問(wèn)題,那么就不需要臨時(shí)約束。一旦所有的奇點(diǎn)都被替換為臨時(shí)不動(dòng)點(diǎn),求解器將逐個(gè)檢查表4中的所有約束,以確定對(duì)用戶有意義的替換。
| 固定x分量 | 長(zhǎng)度 |
| 固定y分量 | 水平 |
| 夾角垂直 | 垂直 |
| 相切 | 半徑 |
| 折轉(zhuǎn)角 | |
| 表4 要添加到草圖中的約束選項(xiàng) |
其中一些約束需要值,如長(zhǎng)度、半徑和轉(zhuǎn)彎角;對(duì)于這些,來(lái)自用戶繪制草圖的初始預(yù)估值用作約束的值。對(duì)于垂直度,約束可以是凸的或凹的交點(diǎn)。在所有這些實(shí)例中,用于驗(yàn)證約束的自動(dòng)生成的值都將顯示給用戶,然后要求用戶提供一個(gè)值。用戶使用的內(nèi)部值只是為用戶提供指導(dǎo),以幫助選擇合適的值。如果用戶輸入的值與測(cè)試的值差異太大,矩陣可能會(huì)發(fā)展一個(gè)奇點(diǎn)并導(dǎo)致牛頓求解器發(fā)散;有關(guān)更多細(xì)節(jié),請(qǐng)參閱實(shí)現(xiàn)問(wèn)題部分。
為了演示來(lái)自草圖器的反饋,我們從表3中刪除了兩個(gè)約束條件。刪除的約束垂直于頂點(diǎn)6(靠近圖左側(cè)的內(nèi)角)和水平段3-4(在頂部)。去除這些約束會(huì)導(dǎo)致一個(gè)定義不足的草圖,無(wú)法解決y6和曲率C2的位置,如圖5所示。
在添加這些臨時(shí)約束之后,用戶將給出替換臨時(shí)固定的y6的所有可能選項(xiàng),以選擇要添加到系統(tǒng)中的選項(xiàng)。本案例有9種可能的選擇,如圖6所示。
對(duì)于這個(gè)示例,用戶選擇在頂點(diǎn)6處添加凹垂直度,這是從原始完全定義的系統(tǒng)中刪除的約束;呈現(xiàn)給用戶的九個(gè)選項(xiàng)中的任何一個(gè)都將允許草圖被求解。由于從系統(tǒng)中刪除了兩個(gè)約束,因此還有另一個(gè)臨時(shí)約束需要用一個(gè)更符合用戶設(shè)計(jì)意圖的約束來(lái)替換。
有15個(gè)選項(xiàng)可以替換臨時(shí)固定的C2點(diǎn),如圖7所示。
選擇段3-4是水平的選項(xiàng)將導(dǎo)致最初使用的相同的約束集和相同的圖形。與前面一樣,這15個(gè)選項(xiàng)中的任何一個(gè)都將產(chǎn)生一個(gè)完全定義的草圖。
該系統(tǒng)的優(yōu)點(diǎn)是,添加的約束是暫時(shí)的,僅僅是識(shí)別當(dāng)前草圖系統(tǒng)的所有問(wèn)題的一個(gè)步驟,并被用戶選擇的約束所取代。為未定義的草圖替換臨時(shí)約束的過(guò)程同樣用于修復(fù)不適當(dāng)約束的系統(tǒng)(后面將描述)。
過(guò)約束 Over-Constrained
過(guò)約束的草圖是所有被測(cè)試的商業(yè)CAD系統(tǒng)都承認(rèn)并提供一些修復(fù)建議的唯一狀態(tài)。在AutoCAD中,當(dāng)添加一個(gè)新的約束導(dǎo)致系統(tǒng)過(guò)渡約束時(shí),通知用戶添加該約束將過(guò)度約束系統(tǒng),因此不能添加,如圖8所示。AutoCAD對(duì)如何解決該問(wèn)題沒(méi)有提供任何幫助,而只通知用戶存在該問(wèn)題。
從所顯示的消息來(lái)看,AutoCAD并不區(qū)分不正確和過(guò)度約束的系統(tǒng)。如果不清楚所有的約束都應(yīng)該是什么,這可能會(huì)使一個(gè)完全定義的草圖難以獲得。另一個(gè)挑戰(zhàn)是AutoCAD不允許某些約束(例如在圖2中的頂點(diǎn)1處的垂直度約束)。為了繞過(guò)這一點(diǎn),下一個(gè)邏輯約束將是將圓弧1的中心設(shè)置為與線段8-1共線。共線性約束,與其他約束一起,將在該頂點(diǎn)保持垂直交點(diǎn)。遺憾的是,這也不是AutoCAD中的一個(gè)選項(xiàng),演示提供如何完全約束草圖的建議對(duì)用戶有幫助。
項(xiàng)目工程師提供了更多的信息,發(fā)布一個(gè)窗口,標(biāo)識(shí)與被添加的約束沖突的約束,并允許用戶選擇刪除哪個(gè),如圖9所示。
修復(fù)草圖以更好地限制原工程師當(dāng)然更友好;然而,這對(duì)所有的情況都沒(méi)有幫助。偶爾,每個(gè)約束都作為一個(gè)選項(xiàng)呈現(xiàn)出來(lái),這可能實(shí)際上對(duì)用戶沒(méi)有幫助。SolidWorks查看了一個(gè)過(guò)度約束的草圖,并提供了一個(gè)手動(dòng)修復(fù)或診斷工具。手動(dòng)修復(fù)類似于原始工程師,因?yàn)樗皇翘峁┝艘粋€(gè)相互沖突的約束條件的列表。該診斷工具更為復(fù)雜,使用起來(lái)需要時(shí)間。診斷工具消除了相互沖突的約束,并提供了解決方案來(lái)修復(fù)草圖的適當(dāng)約束。圖10顯示了提供給用戶的反饋的一個(gè)示例。
SolidWorks中的診斷工具提供了修復(fù)草圖的所有選項(xiàng),在選擇之后,草圖將完全定義。注意,雖然在診斷工具中,草圖在用戶進(jìn)行選擇之前定義不足。草圖通過(guò)基于草圖的靈敏度對(duì)解決方案進(jìn)行排序,進(jìn)一步提高了這個(gè)反饋,并提出了在最終草圖中與原始猜測(cè)差異最小的選項(xiàng),將在靈敏度部分中進(jìn)一步討論。
草圖求解器識(shí)別冗余的約束選項(xiàng),并通過(guò)在圖中以紅色突出顯示約束來(lái)將它們呈現(xiàn)給用戶。然后,用戶可以選擇從系統(tǒng)中刪除哪些約束,以生成一個(gè)完全定義的系統(tǒng)。下一節(jié)將使用一個(gè)例子來(lái)演示過(guò)度約束的反饋。
不適當(dāng)約束 Improperly Constrained
診斷不當(dāng)約束系統(tǒng)使用欠約束和過(guò)約束方法的組合。首先,需要確定未確定的坐標(biāo),這與欠約束問(wèn)題的處理方式相同。要向問(wèn)題添加臨時(shí)約束,草圖將成為過(guò)度約束,并且臨時(shí)約束必須替換系統(tǒng)中的當(dāng)前約束之一。標(biāo)識(shí)可以添加臨時(shí)約束的執(zhí)行方式與過(guò)度約束的系統(tǒng)相同。一旦約束系統(tǒng)具有適當(dāng)數(shù)量的約束,并且能夠確定所有的坐標(biāo),草圖求解器就可以像以前一樣開(kāi)始替換臨時(shí)約束的過(guò)程。
專業(yè)的工程師和SolidWorks除了不允許添加沖突約束的對(duì)話框外,都沒(méi)有為不適當(dāng)約束的系統(tǒng)提供任何反饋。這樣做的問(wèn)題是,有時(shí)有些約束比其他約束更重要,而且約束不一定是由用戶按重要性的順序添加的。在商業(yè)CAD系統(tǒng)中,如果沒(méi)有關(guān)于沖突約束的信息,用戶可以嘗試找出問(wèn)題在哪里,或者重新開(kāi)始,并希望得到更好的結(jié)果。
使用圖2所示的草圖,并修改約束得到一個(gè)不當(dāng)約束問(wèn)題,可以演示草圖求解器。將頂點(diǎn)6(靠近圖左側(cè)的內(nèi)角)處的垂直度約束替換為弧2半徑(右側(cè)較大的頂部弧)的設(shè)定值,將創(chuàng)建冗余信息。y6的位置不能用這個(gè)方程組來(lái)確定,因此必須添加一個(gè)臨時(shí)的約束。然而,一個(gè)不適當(dāng)?shù)募s束系統(tǒng)有9個(gè)約束。為了給方程組添加一個(gè)臨時(shí)的約束,必須刪除一個(gè)方程組。圖11顯示了可以用臨時(shí)固定點(diǎn)替換的約束選項(xiàng)。
對(duì)于這種特殊情況,只有一個(gè)選項(xiàng)可用來(lái)消除約束。一旦將所有必要的臨時(shí)固定點(diǎn)約束添加到系統(tǒng)中,草圖求解器將尋找替換之前的臨時(shí)約束的選項(xiàng),如圖12所示。當(dāng)前的設(shè)置將產(chǎn)生8個(gè)選項(xiàng)來(lái)替換臨時(shí)約束。
其中的任何一個(gè)都可以被選擇來(lái)得到一個(gè)完全約束的系統(tǒng)。這些選項(xiàng)以有序列表的形式呈現(xiàn)給用戶,首先列出與原始猜測(cè)偏差最小的選項(xiàng)。
四、示例和過(guò)程中問(wèn)題
圖2中定義的草圖已用于演示草圖求解器在不同情況下將提供的各種類型的反饋。草圖求解器也已經(jīng)使用更復(fù)雜的、真實(shí)世界的草圖進(jìn)行了測(cè)試。圖13中的草圖是工程圖形7中的一部分的改編,使用OpenCSM素描圖復(fù)制。
并不是所有的草圖約束都在工程圖紙中被清楚地識(shí)別出來(lái),求解器被用于幫助確定完全定義系統(tǒng)所必需的一些最終約束。
這個(gè)草圖也提供了一個(gè)例子來(lái)討論“距離關(guān)系”是什么,特別是因?yàn)樗ǔS糜诿枋鰴C(jī)械部件。距離關(guān)系是從頂點(diǎn)到直線的約束。例如,在圖13中,頂點(diǎn)3距離圖的右側(cè)有3.30英寸。這在頂點(diǎn)用“d”標(biāo)記。與長(zhǎng)度關(guān)系相似,只有該關(guān)系中的第一個(gè)頂點(diǎn)被標(biāo)記。
這個(gè)新系統(tǒng)面臨的最大挑戰(zhàn)是奇點(diǎn)問(wèn)題。最終,草圖的狀態(tài)依賴于由約束和初始或當(dāng)前猜測(cè)產(chǎn)生的雅可比矩陣。奇異雅可比矩陣是兩個(gè)問(wèn)題之一的指示:一個(gè)錯(cuò)誤的猜測(cè)或一個(gè)不正確的約束方程。當(dāng)用戶通過(guò)在空間中放置點(diǎn)來(lái)在屏幕上繪制圖形時(shí),就可以獲得初始猜測(cè)。因此,對(duì)頂點(diǎn)的位置得到了一個(gè)合理的初始猜測(cè)。當(dāng)向系統(tǒng)添加約束時(shí),最初的猜測(cè)可能會(huì)產(chǎn)生一個(gè)通過(guò)選擇智能約束來(lái)解決的問(wèn)題。
首先,人們可以預(yù)測(cè),如果一個(gè)矩陣有一個(gè)奇異點(diǎn),當(dāng)矩陣最初建立時(shí)會(huì)很明顯。然而,由于牛頓法中固有的迭代過(guò)程,一個(gè)奇點(diǎn)可能會(huì)在幾次迭代后“出現(xiàn)”。例如,初始猜測(cè)可能在水平段兩端的y值上有差異,當(dāng)求解草圖時(shí),當(dāng)水平約束滿足了時(shí),這個(gè)差異會(huì)變小。如果在同一段上也有長(zhǎng)度約束,則當(dāng)滿足水平約束時(shí),段兩端的y坐標(biāo)可能成為未定義。
在替換臨時(shí)約束時(shí),也會(huì)考慮到同樣的問(wèn)題。如果草圖求解器試圖確定一個(gè)y值,并且線段幾乎是水平的,那么線段的長(zhǎng)度將在幾次迭代后產(chǎn)生一個(gè)奇點(diǎn)。這是因?yàn)樗蕉蔚拈L(zhǎng)度只依賴于水平段兩端的x值。這將是一個(gè)很差的約束選擇,所以草圖求解器在這些情況下不會(huì)測(cè)試長(zhǎng)度。
當(dāng)一些約束得到滿足時(shí),奇點(diǎn)“出現(xiàn)”在矩陣中的問(wèn)題,使得簡(jiǎn)單地看雅可比矩陣不足以確定添加該約束是否是一個(gè)合理的選擇。為了防止在最終草圖中出現(xiàn)問(wèn)題,矩陣被每個(gè)約束測(cè)試完全約束,以確定被測(cè)試的約束的有效性。
草圖器的功能是巨大的,并為用戶提供有價(jià)值的反饋,以幫助創(chuàng)建和維護(hù)一個(gè)完全定義的草圖。如前所述,檢查所有的約束選項(xiàng)可能是一個(gè)耗時(shí)的過(guò)程。除了只檢查不會(huì)產(chǎn)生奇點(diǎn)的合理選項(xiàng)外,直觀上的壞約束也會(huì)被跳過(guò)。例如,檢查線段的長(zhǎng)度,但如果線段是弧,則跳過(guò)長(zhǎng)度。類似地,半徑和轉(zhuǎn)彎角約束只檢查弧,因?yàn)樗鼈儾贿m用于線性問(wèn)題。
五、敏感
除了發(fā)現(xiàn)和糾正奇點(diǎn)問(wèn)題外,還有敏感性問(wèn)題。偶爾,在設(shè)計(jì)過(guò)程中,用戶可能想知道的不僅僅是解決方案是什么。當(dāng)試圖優(yōu)化一個(gè)形狀以滿足其他一些工程目標(biāo)時(shí),每個(gè)點(diǎn)對(duì)其中一個(gè)約束條件中的擾動(dòng)的敏感性可以是有價(jià)值的信息。例如,再次查看圖2中的測(cè)試草圖,用戶可能需要稍微改變總長(zhǎng)度,以滿足空氣動(dòng)力學(xué)目標(biāo)。當(dāng)改變一個(gè)約束時(shí),就會(huì)對(duì)整個(gè)系統(tǒng)產(chǎn)生影響,并且某些點(diǎn)比其他點(diǎn)受到的影響更大。
了解每個(gè)頂點(diǎn)如何受到不同約束的影響,可以為設(shè)計(jì)者提供有價(jià)值的信息,了解在其他領(lǐng)域可以進(jìn)行影響最小的更改。靈敏度矩陣可以簡(jiǎn)單地使用有限差分來(lái)確定,如等式所示 (4)。
(5)
檢查這個(gè)矩陣的單個(gè)元素可以闡明靈敏度矩陣是如何形成的。例如,在等式中(5)L是總長(zhǎng)度,它是9個(gè)單位,然后擾動(dòng)為9.02個(gè)單位,以找到第二個(gè)頂點(diǎn)的x坐標(biāo)對(duì)總長(zhǎng)度約束的敏感性。靈敏度矩陣的每個(gè)元素都使用相同的過(guò)程找到。全靈敏度矩陣的轉(zhuǎn)置如表5所示,其中每個(gè)約束方程都被2π/180擾動(dòng)。轉(zhuǎn)置矩陣的行表示如表3所示的約束方程,列是每個(gè)點(diǎn)的x和y位置,然后是三個(gè)弧曲率。
從靈敏度矩陣來(lái)看,每個(gè)約束對(duì)系統(tǒng)的每個(gè)定義坐標(biāo)的影響是清楚的。例如,看看轉(zhuǎn)置的靈敏度矩陣的第一行,我們可以看到只有x坐標(biāo)受到第一個(gè)約束(固定的x1)中的擾動(dòng)的影響。這一觀察結(jié)果既合乎邏輯又微不足道。然而,最后一個(gè)約束(圓弧1的固定半徑)對(duì)草圖另一邊的x坐標(biāo)的影響很小或沒(méi)有影響,這在直觀上并不明顯,但通過(guò)靈敏度矩陣很容易看出。
靈敏度信息在繪制器中用于對(duì)解進(jìn)行排序,通過(guò)將使所有頂點(diǎn)最接近初始猜測(cè)的解首先進(jìn)行排序。對(duì)于一個(gè)復(fù)雜的草圖,哪種約束替換是最好的,哪一個(gè)最接近用戶的意圖,因此對(duì)解決方案進(jìn)行排序可以幫助用戶決定添加哪個(gè)約束。
六、摘要
草圖是現(xiàn)代幾何生成技術(shù)的基石,而理解如何正確地約束它們已經(jīng)被證明是具有挑戰(zhàn)性的。向用戶提供關(guān)于草圖在哪里有約束問(wèn)題的信息,將幫助用戶以更有效的方式構(gòu)建草圖。理解敏感性可以幫助工程師就幾何圖形和約束選項(xiàng)做出更明智的優(yōu)化決策。
七、最后
1、約束問(wèn)題是幾何內(nèi)核中的一個(gè)核心內(nèi)容。在成熟的商業(yè)CAD軟件中,是否擁有完善的約束功能通常是一個(gè)重要的衡量標(biāo)準(zhǔn)。
2、約束問(wèn)題由于其問(wèn)題規(guī)模的龐大,成為了大部分開(kāi)發(fā)工程都不能輕松面對(duì)的問(wèn)題。
3、本文的目的,主要還是提供一種從數(shù)值層面求解約束問(wèn)題的思路,但其完備性有待檢驗(yàn)。如果你是一個(gè)約束問(wèn)題的初心者,那么這個(gè)思路可以成為你入門的參考。如果你是一個(gè)經(jīng)驗(yàn)豐富者,那么希望本篇中提到的細(xì)節(jié)能成為你優(yōu)化自身產(chǎn)品的建議。
4、目前的主流約束求解器通常都會(huì)采用多種策略來(lái)進(jìn)行工作。包括本文所用到的數(shù)值法,更為理想的求解模型還需要加入符號(hào)法與圖構(gòu)造法來(lái)聯(lián)合求解,這又是另一個(gè)話題了。
總結(jié)
- 上一篇: error LNK2001:unreso
- 下一篇: C# Action