1 //掃瞄線填充演算法類
顯示**列印001 class cpfill
002 ;
017 //建構函式 (模組入口,koradji 注,合理的設計這個地方,就可以完全不用改動其他的地方就可以使用這個類)
018 cpfill::cpfill()
019
020 //獲取前乙個點的索引號
021 int cpfill::getbi(int i)
022
025 //獲取下乙個點的索引號
026 int cpfill::getai(int i)
027
030 //在指定的pdc裝置中,填充多邊形
031 bool cpfill::fillpolygon(cdc* pdc)
032
043 cuintarray xarray;
044 int y;
045 for(y=miny;y046
064 else
065
070 }
071 else
072
076 }
077 }
078 int *scanlinex,num=xarray.getsize();
079 scanlinex=new int[num];
080 for(i=0;i081 xarray.removeall();
082 sort(scanlinex,num);//對scanline(掃瞄線x座標進行排序)
083 for(i=0;i084
088 sleep(1);//cpu暫停1ms,以體現出多邊形是以掃瞄線的方式,一條一條的填充的
089 delete scanlinex;
090 }
091 return true;
092 }
093
094 //判斷兩條線段是否相交
095 bool cpfill::crossjudge(cpoint l1p1,cpoint l1p2,cpoint l2p1,cpoint l2p2,cpoint& coordinate)
096
107 else return false;
108 }
109 if(l1p1.x==l1p2.x)//當第一條線段斜率不存在時的
110
121 return false;
122 }
123 else
124
137 return false;
138 }
139 else//兩條線段斜率都存在時
140
156 return false;
157 }
158 }
159 return true;
160 }
161
162 //氣泡排序
163 bool cpfill::sort(int* iarray,int ilength)
164
179 }
180 if(bflag) break;
181 }
182 return true;
183 }
184 //析構函式,刪除動態生成的point指標
185 cpfill::~cpfill()
186
下面說說怎麼為我所用這個類。
在mfc中,若多邊形控制定點的變數是:cpoint *p,記錄下標的變數為int index。
則建構函式則變為
顯示**列印1 cpfill::cpfill(int index,cpoint *p)
2 如果多邊形控制定點的變數是:int px[max] int py[max],記錄下標的變數為int index。
則建構函式是:
顯示**列印01 cpfill::cpfill(int index,int px,int py)
02
10 }
掃瞄線法填充多邊形
如下圖所示多邊形 直線y 1,2,3 8順序掃瞄多邊形,以直線y 3為例,它與多邊形的邊有4個交點,將這4個交點的x座標儲存下來,兩兩之間畫線,也就是 a,b c,d 之間畫線。對於每乙個y都是兩兩之間畫線。現在考慮直線y 2,它與多邊形有3個交點,很顯然是f,g之間畫線,那麼p1怎麼處理呢?可以觀...
多邊形區域填充演算法 掃瞄線種子填充演算法
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!1.3掃瞄線種子填充演算法 1.1和1.2節介紹的兩種種子填充演算法的優點是非常簡單,缺點是使用了遞迴演算法,這不但需要大量棧空間來儲存相鄰的點,而且效率不高。為了減少演算法中的遞迴呼叫,節省棧空間的使用,人們提出了很多改進演算法,其中一種就是掃瞄...
掃瞄多邊形填充演算法
掃瞄多邊形填充演算法 在做手機地圖的過程中,由於j2me沒提供多邊形填充的api,只能自己實現了,以下是實現的思路,請批評指正 多邊形填充,就是把多邊形所佔據的柵格象素賦予指定的顏色值。要完成這個任務,乙個首要的問題就是求出多邊形所佔據的柵格象素,判斷乙個網格在多邊形內還是多邊形外,在多邊形內的象素...