❶ DDA方法的應用
DDA自問世以來已經獲得極為廣泛的應用。裴覺民等[23]將DDA方法應用在裂隙岩體邊坡工程中,對原始邊坡和開挖後的邊坡進行了計算,並考慮了爆破作用對邊坡穩定性的影響。T.C.Ke[24]應用DDA方法和極限平衡法研究了某邊坡的穩定性,指出了DDA方法的優越性;Xuecheng Dong[25]將 DDA 方法應用在三峽船閘邊坡的穩定性研究中;S.L.Zhao等[26]、G.Q.Chen 等[27]將 DDA 方法應用在岩石邊坡的穩定性分析中;Y.H.Hat zor[28]應用關鍵塊體理論和DDA方法研究了Masada山脈某邊坡的穩定性及破壞模式;周少懷等[29]基於DDA演算法,補充和發展了DDA方法計算機程序,分析了邊坡大位移問題和地下開挖引起地面變形的工程實例,並與離散元計算結果進行了比較研究。Kim YongⅡ等(1996)[19]將DDA方法應用在地下工程的開挖及岩體支護設計中,認為所建立的演算法可以模擬地下工程的開挖過程。首先要計算出開挖前岩體內的應力狀態,其次根據第一次開挖步來確定新產生的應力分布,新產生的應力作為下一次開挖的初始應力,開挖過程結束以前一直進行這樣的迭代計算。經過算例研究,認為岩體開挖的最終穩定性與開挖次序及相應的應力歷史有關。另外,他們還進行了噴射混凝土和混凝土襯砌方面的研究,將噴射混凝土和混凝土襯砌處理成具有一定厚度和材料性質的單元進行分析研究。鄔愛清等[30]根據已初步開發出的DDA模型計算程序,分別就某工程試驗洞開挖和邊坡明挖問題進行了計算,並與有限元結果進行了比較,結果表明,DDA模型計算結果在岩體開挖位移形態及位移量級上與有限元及實際位移監測結果都具有較好的可比性。
Kuokai Shyu 等[13]應用DDA方法研究了在地震作用下Bartlett 壩肩的穩定性;Shilong Zhao等[31]應用DDA方法研究了岩體的傾倒破壞問題;Lanbo Liu[32]應用DDA方法研究了大地構造學中的板塊運動;Takeshi Sasaki等[33]應用有限元方法和DDA方法研究了裂隙岩體地基的穩定性,結果與解析分析極為吻合;C.J.Pearce等(1998)[34]將DDA方法應用在混凝土破裂行為模擬中;Y.I.Kim等[35]將DDA方法應用在混凝土壩基的穩定性分析中;S.M.Hsiung[36]等將DDA方法應用在地震荷載對地下工程的穩定性影響中;A.Mortazavi等[37]將DDA方法應用在礦山岩暴分析中;戴華陽等[38]提出了急傾斜煤層開采地表非連續變形的度量方法。
DDA方法主要是針對岩石介質的,T.C.Ke 等[39]、P.A.Thomas 等[40]、Yuzo Ohnishi等[41]、Kuokai Shyu 等[42]將其應用在土力學中,給出了顆粒體介質DDA的演算法;Y.N.Oh等[43]將DDA方法應用在海堤基礎及地基土的相互作用中;L.K.Chien[44]等將DDA方法應用在海床的沖刷與回填穩定性分析中;張國新等[45]採用正多邊形體代替圓形顆粒體來模擬土的應力-應變關系。
國內外學者對DDA的大量研究,使得該方法更加成熟、更加適合於岩體系統的變形分析。由於DDA方法具有完備的塊體運動學理論,且將靜力分析與動力分析統一起來,因此其具有處理結構工程、岩體力學以及材料分析等方面的能力。但也應該清晰地看到,DDA方法問世僅10餘年,在具體應用上仍然存在一些不足。我們知道,DDA方法最初是用於解決岩體不連續變形問題的,其用實際結構面所切割的岩塊作為分析單元,但目前國內外在研究與應用DDA方法中均忽略了對結構面的調查與研究,往往用假想的規則的塊體單元或者考慮了規模比較大的實際結構面所形成的塊體單元進行研究[46],忽略了隨機分布的較小規模的結構面,這樣的單元僅能用於驗證 DDA的有效性,而不能用於實際工程中;另外目前的研究忽略了結構面的充填厚度,實際上結構面的充填物對岩體的穩定性具有重要的影響。從工程實踐來看,結構面不論規模大小幾乎都有一定程度的充填,結構面的充填物不能像文獻[47]等那樣簡單地理解為軟弱夾層,充填的是泥土、碎石土等,事實上,在新鮮岩體內結構面的充填物具有相當高的彈性模量,且充填厚度與結構面的規模成一定比例關系[48]。岩體變形包括結構體(塊體)變形和結構面變形,因此塊體系統的變形不僅發生在塊體本身,也包括結構面的變形,而且塊體本身的變形往往小於結構面的變形,因此要合理地描述整個塊體系統的變形,應該研究結構面的變形對整個塊體系統變形的貢獻。
❷ dda法生成直線的基本原理是什麼為什麼說Bersenham畫圓的演算法效率較高
DDA演算法主要是根據直線公式y = kx + b來推導出來的,其關鍵之處在於如何設定單位步進,即一個方向的步進為單位步進,另一個方向的步進必然是小於1。演算法的具體思路如下:
1. 輸入直線的起點、終點;
2. 計算x方向的間距:△X和y方向的間距:△Y。
3. 確定單位步進,取MaxSteps = max(△X,△Y); 若△X>=△Y,則X方向的步進為單位步進,X方向步進一個單位,Y方向步進△Y/MaxSteps;否則相反。
4. 設置第一個點的像素值
5. 令循環初始值為1,循環次數為MaxSteps,定義變數x,y,執行以下計算:
a. x增加一個單位步進,y增加一個單位步進
b. 設置位置為(x,y)的像素值
Bresenham演算法是DDA演算法畫線演算法的一種改進演算法。本質上它也是採取了步進的思想。不過它比DDA演算法作了優化,避免了步進時浮點數運算,同時為選取符合直線方程的點提供了一個好思路。首先通過直線的斜率確定了在x方向進行單位步進還是y方向進行單位步進:當斜率k的絕對值|k|<1時,在x方向進行單位步進;當斜率k的絕對值|k|>1時,在y方向進行單位步進。
1. 輸入線段的起點和終點。
2. 判斷線段的斜率是否存在(即起點和終點的x坐標是否相同),若相同,即斜率不存在,
只需計算y方向的單位步進(△Y+1次),x方向的坐標保持不變即可繪制直線。
3. 計算線段的斜率k,分為下面幾種情況處理
a. k等於0,即線段平行於x軸,即程序只需計算x方向的單位步進,y方向的值不變
b. |k|等於1,即線段的x方向的單位步進和y方向的單位步進一樣,皆為1。直接循環△X次計算x和y坐標。
4. 根據輸入的起點和終點的x、y坐標值的大小決定x方向和y方向的單位步進是1還是-1
6. 畫出第一個點。
7. 若|k| <1,設m =0,計算P0,如果Pm>0,下一個要繪制的點為(Xm+單位步進,Ym),
Pm+1 = Pm -2*△Y;
否則要繪制的點為(Xm+單位步進,Ym+單位步進)
Pm+1 = Pm+2*△X-2*△Y;
8. 重復執行第七步△X-1次;
9. 若|k| <1,設m =0,計算Q0,如果Qm>0,下一個要繪制的點為(Xm,Ym+單位步進),
Pm+1 = Pm -2*△X;
否則要繪制的點為(Xm+單位步進,Ym+單位步進)
Pm+1 = Pm+2*△Y-2*△X;
10. 重復執行第9步△Y-1次;
❸ 如何簡單理解DDA演算法
DDA稱為數值微分畫線演算法。
是直線生成演算法中最簡單的一種.原理相當簡單,就是最直觀的根據斜率的偏移程度,決定是以x為步進方向還是以y為步進方向.然後在相應的步進方向上,步進變數每次增加一個像素,而另一個相關坐標變數則為Yk_1=Yk+m(以x為步進變數為例,m為斜率)。