欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python掃描線填充算法詳解

 更新時間:2020年02月19日 13:18:49   作者:油醋三椒  
這篇文章主要為大家詳細介紹了python掃描線填充算法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了python掃描線填充算法,供大家參考,具體內(nèi)容如下

介紹

1.用水平掃描線從上到下掃描由點線段構(gòu)成的多段構(gòu)成的多邊形。

2.每根掃描線與多邊形各邊產(chǎn)生一系列交點。將這些交點按照x坐標進行分類,將分類后的交點成對取出,作為兩個端點,以所填的色彩畫水平直線。

3.多邊形被掃描完畢后,填色也就完成。

數(shù)據(jù)結(jié)構(gòu)

活性邊表:

新邊表:

代碼(使用數(shù)組)

import numpy as np
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
 
array = np.ndarray((660, 660, 3), np.uint8)
array[:, :, 0] = 255
array[:, :, 1] = 255
array[:, :, 2] = 255
 
for i in range(0,660,1):
 array[i,330]=(0,0,0)
for j in range(0,660,1):
 array[330,j]=(0,0,0)
 
 
def creat_Net(point, row, y_min,y_max ): 
 Net = [([ ] * y_max ) for i in range(y_max )] 
 point_count = point.shape[0]
 for j in range(0, point_count): 
 x = np.zeros(10) 
 first = int(min(point[(j+1)%point_count][1] , point[j][1])) 
 x[1] = 1/((point[(j+1)%point_count][1]-point[j][1])/(point[(j+1)%point_count][0]-point[j][0])) # x 的增量
 x[2] = max(point[(j+1)%point_count][1] , point[j][1]) 
 if(point[(j+1)%point_count][1] < point[j][1]):
  x[0] = point[(j+1)%point_count][0] 
 else:
  x[0] = point[j][0] 
 Net[first].append(x) 
 return Net

def draw_line(i,x ,y ):
 for j in range(int(x),int(y)+1):
 array[330-i,j+330]=(20,20,20)
 

def polygon_fill(point):
 y_min = np.min(point[:,1])
 y_max = np.max(point[:,1]) 
 Net = creat_Net(point, y_max - y_min + 1, y_min, y_max) 
 x_sort = [] * 3
 for i in range(y_min, y_max): 
 x = Net[i]
 if(len(x) != 0): 
  for k in x :
  x_sort.append(k) 
 x_image = [] * 3 
 for cell in x_sort:
  x_image.append(cell[0])
 x_image.sort()
 if(len(x_image) >= 3 and x_image[0]==x_image[1] and x_image[2]>x_image[1]):
  x_image[1] = x_image[2] 
 draw_line(i, x_image[0], x_image[1])
 
 linshi = [] * 3 
 for cell in x_sort:
  if cell[2] > i: 
  cell[0] += cell[1]
  linshi.append(cell)  
 x_sort = linshi[:] 

 x_image = [] * 3 
 for cell in x_sort:
 x_image.append(cell[0])
 x_image.sort()
 
 draw_line(i, x_image[0],x_image[1]) 

def main(): 
 point = [[55,40], [100,80], [100,160],[55,180], [10,160], [10,80]]
 point = np.array(point) 
 polygon_fill( point )
 image = Image.fromarray(array)
 image.save('saomao.jpg')
 image.show() 

if __name__ == "__main__":
 main()

實例:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python OS模塊實例詳解

    Python OS模塊實例詳解

    這篇文章主要介紹了Python OS模塊,結(jié)合實例形式總結(jié)分析了Python使用OS解析文件路徑、判斷文件、目錄等相關(guān)操作技巧,需要的朋友可以參考下
    2019-04-04
  • python如何通過twisted搭建socket服務(wù)

    python如何通過twisted搭建socket服務(wù)

    這篇文章主要介紹了python如何通過twisted搭建socket服務(wù),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • Python設(shè)計模式行為型觀察者模式

    Python設(shè)計模式行為型觀察者模式

    這篇文章主要介紹了Python設(shè)計模式行為型觀察者模式,觀察者模式即Publish?Subscribe?Pattern,定義了一種一對多的關(guān)系,讓多個觀察對象同時監(jiān)聽一個主題對象,當(dāng)主題對象狀態(tài)發(fā)生變化時會通知所有觀察者,是它們能夠自動更新自己,下面和小編一起進入文章學(xué)習(xí)詳細內(nèi)容吧
    2022-02-02
  • python爬取m3u8連接的視頻

    python爬取m3u8連接的視頻

    這篇文章主要為大家詳細介紹了python如何爬取m3u8連接的視頻,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • django模型中的字段和model名顯示為中文小技巧分享

    django模型中的字段和model名顯示為中文小技巧分享

    這里給大家分享2個可以讓django模型中的字段和model名顯示為中文的小技巧,非常的簡單實用,給需要的小伙伴參考下。
    2014-11-11
  • python time.sleep()是睡眠線程還是進程

    python time.sleep()是睡眠線程還是進程

    這篇文章主要介紹了python time.sleep()是睡眠線程還是進程,通過實例代碼給大家介紹了Python Sleep休眠函數(shù) ,需要的朋友可以參考下
    2019-07-07
  • python對數(shù)組進行反轉(zhuǎn)的方法

    python對數(shù)組進行反轉(zhuǎn)的方法

    這篇文章主要介紹了python對數(shù)組進行反轉(zhuǎn)的方法,涉及Python中reverse方法的使用技巧,需要的朋友可以參考下
    2015-05-05
  • python實現(xiàn)優(yōu)雅的打印json格式文本

    python實現(xiàn)優(yōu)雅的打印json格式文本

    這篇文章主要介紹了python實現(xiàn)優(yōu)雅的打印json格式文本方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 利用OpenCV判斷是否加載圖片的兩種方法

    利用OpenCV判斷是否加載圖片的兩種方法

    這篇文章主要介紹了利用OpenCV判斷是否加載圖片的兩種方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Python中Selenium的基本使用步驟

    Python中Selenium的基本使用步驟

    Selenium是一個用于自動化瀏覽器操作的Python庫,常用于Web應(yīng)用的測試和爬蟲等場景,本文給大家介紹Python中Selenium的基本使用教程,感興趣的朋友一起看看吧
    2023-11-11

最新評論