任意封閉多邊形的掃瞄線填充演算法類

2021-05-24 11:56:22 字數 2273 閱讀 3313

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,只能自己實現了,以下是實現的思路,請批評指正 多邊形填充,就是把多邊形所佔據的柵格象素賦予指定的顏色值。要完成這個任務,乙個首要的問題就是求出多邊形所佔據的柵格象素,判斷乙個網格在多邊形內還是多邊形外,在多邊形內的象素...