計算機圖形學常用演算法實現5 區域填充演算法-遞迴形式
遞迴形式的區域填充演算法的效率實在是太低了(就是裸的dfs),導致圖形大一點就會爆棧,沒有很大的實用性。
程式碼如下:
void floodFill4(int x,int y,int i) { if (map[x, y] == false) { g.FillRectangle(p, new RectangleF(x, y, 1, 1)); map[x, y] = true; floodFill4(x, y - 1,i+1); floodFill4(x, y + 1,i+1); floodFill4(x - 1,y,i+1); floodFill4(x + 1, y,i+1); } }
效果如下:
相關推薦
計算機圖形學常用演算法實現5 區域填充演算法-遞迴形式
遞迴形式的區域填充演算法的效率實在是太低了(就是裸的dfs),導致圖形大一點就會爆棧,沒有很大的實用性。 程式碼如下: void floodFill4(int x,int y,int i) { if (map[x, y] == false) {
計算機圖形學常用演算法實現6 區域填充演算法-非遞迴形式(掃描線優化)
執行環境winform 這個演算法基本上是書上的思路,沒有很大的變動,感覺程式碼寫的很秀,很有水平。 不斷把所有待填充的區間新增到stack,然後一個個填充,效率比之前寫的都要高一些。 主要程式碼如下(多邊形的構建,map函式的初始化等需要自行新增): void ScanLineFill
【計算機圖形學】圖元的區域填充之多邊形的區域填充
相關資料來源於網路,侵刪歉。 如果文章中存在錯誤,請下方評論告知我,謝謝! 多邊形的區域填充 首先,我們瞭解一下多邊形。 多邊形可以簡單地分為凸多邊形和凹多邊形,除此之外,我們還要討論內含環的多邊形,如下圖。 多邊形的表示方法 頂點表示:用多邊形頂點的序列來刻畫多邊形。直觀、幾何
【計算機圖形學】圖元的區域填充之矩形的區域填充
相關資料來源於網路,侵刪歉。 如果文章中存在錯誤,請下方評論告知我,謝謝! 矩形的區域填充 前提 矩形的頂點座標均為整數。 我們簡單地實現一下,思路是在矩形內逐行逐列點亮每個畫素,如圖。 typedef struct{ int xmin, xmax; int ymin,
計算機圖形學(三)掃描線多邊形填充演算法講解與原始碼
如果喜歡轉載請標明出處: 並非菜鳥菜鳥的部落格 在這裡先說下演算法的實現過程 本人覺得這個演算法實現起來還是有點難度的!很多人都不願意去看太多描述性的文字,所以對這個演算法的過程是什麼大概也不知道,那麼我在這裡簡要的說一些! 演算法實現過程中應用兩個資料結構:
計算機圖形學常用演算法實現10 多邊形裁剪Sutherland-Hodgman演算法
演算法原理比較簡單,用裁剪區域的四條邊分別去分割多邊形。 假設邊p1,p2,用區域某條邊進行裁剪。方向為p1->p2 1.p1在邊外,p2在邊外 無操作 2.p1外,p2內 儲存交點p和p2 3.p1內,p2內 儲存p2 4.p1內,p2外 儲存交點 分割完之後更新多邊形的點集 程式碼
計算機圖形學常用演算法實現9 樑友棟-Barskey裁剪演算法
這個演算法的效率比前面提到的Cohen-Sutherland要高 思路是把直線表示為引數方程形式, x= x1+udx y = y1+udy 由xmin<x<xmax ymin<y<ymax 可以得到四個不等式,簡化成同一個形式up<q 當p不等於0的時候,可以
計算機圖形學常用演算法實現8 中點分割裁剪演算法
這種方法使用了二分法查詢邊界,優化了Cohen-Sutherland方法,減小了討論的數量。 程式碼中邊界範圍是200,200到400,400 程式碼如下: int encode(Point p) { int code = 0; if (p.Y > 400)
計算機圖形學常用演算法實現7 Cohen-Sutherland裁剪演算法
在winform下執行 演算法本身的實現不算很難,但是這個演算法的思路很秀,反正我是想不出來。 程式碼中的區域為(200,200)~(400,400)的區域 int encode(Point p) { int code = 0; if (p.Y > 400)
計算機圖形學常用演算法實現4 多邊形掃描轉換演算法-邊界標誌演算法
程式碼是在winform中執行的。 看書上這個演算法寫起來輕描淡寫的,實際上實現起來還是有很多難點的,難點如下: 1.無法判斷經過某個點的時候是不是應該變號。 2.掃描演算法畫直線的時候,可能同一行有多個點相鄰的情況,如果遇到這樣的點就變號結果會出現錯誤。 3.兩條相鄰邊的路徑可能經過同一個
計算機圖形學常用演算法實現2 中點畫圓法
在winform下實現,如果在其他環境,思路完全一樣,只需替換畫圖的函式即可。 中點畫圓法算是中點畫線法思路的一種實際應用,本質是一樣的。 1.對稱畫圖,只需要畫1/8部分的圓(我們的函式裡面取45~90度部分),其他部分對稱畫過去即可,對稱畫圖的程式碼如下: void
計算機圖形學實驗(一)--直線DDA演算法的實現
1. DDA演算法(數值微分法)原理: 1)網上或者計算機圖形學書本上有詳細介紹。 2)最核心的是選定(x2-x1)和(y2-y1)中較大者為步進方向。 2. 實現工具: 1) VS2017(C++)
計算機圖形學實驗(二)—— 直線Bresenham演算法原始碼
1. Bresenham演算法核心:(詳細原理見末尾) 理解光柵化:畫素點只能是整數點。 藉助決策變數 的正負號判斷下一個點座標,從而避免了計算直線斜率所用乘除法,只需要用加減法。 預設斜率絕對值在區間(0,1)時,即abs(dx)>abs(dy),步進方
計算機圖形學(一)DDA畫線演算法講解與原始碼
很早之前就想寫一個計算機圖形學系列的講解,可是隻寫了2篇,然後就擱置了很長一段時間,現在也算是有時間來繼續之前的想法了。 首先介紹一下演算法: 已知直線過端點P0(x0,y0),P1(x1,y1)的直線段的斜率K=(y1-y0)/(x1-x0),畫線的過程為:從x的
計算機圖形學(二)中點畫圓演算法講解與原始碼
近些天寫了一些關於計算機圖形學的演算法和原始碼! 如果喜歡轉載請標明出處:並非菜鳥的部落格http://blog.csdn.net/syx1065001748 關於中點畫圓,大家都知道是根據圓的8分
計算機圖形學實驗(三)——中點畫圓演算法實現及其原始碼
1.中點畫圓演算法簡介:(以第一象限內靠近Y軸的1/8圓為例) 由於圓的對稱性,只需要考慮的圓上的點。舉例: 引入建構函式:。 分別表示點在圓外,圓上,圓內。 如圖3-8所示:.M是P1和P2中點。 當F(M)<0時,說明M在圓內,進而得知P1離圓弧更近;否則P
計算機圖形學5——Two-Dimensional Viewing and Clipping(二維線段裁剪演算法)
採用Cohen-Sutherland演算法裁剪線段 核心程式碼有: bool line_clipping(CPoint2D p1, CPoint2D p2, CRect *cw, CPoint2D *q1, CPoint2D *q2) // p1, p2: End po
計算機圖形學實驗--DDA演算法的實現
1. DDA演算法(數值微分法)原理: 1)網上或者計算機圖形學書本上有詳細介紹。 2)最核心的是選定(x2-x1)和(y2-y1)中較大者為步進方向。 2. 實現工具: 1) VS2017(C++) 2) 下載外掛:Easyx 。使用方
[計算機圖形學經典演算法] 區域填充
剛學習了計算機圖形學這門課程,為奠定根基的演算法所傾倒,特此記錄一二。 區域填充是指從區域內的某一個象素點(種子點)開始,由內向外將填充色擴充套件到整個區域內的過程。 區域是指已經表示成點陣
計算機圖形學作業——DDA演算法實現
/* CopyRight :sau liuwei Date : 20160313 */ #include<stdio.h> #include<string.h> #include<windows.h> void DDALine(HDC