-
大小: 4KB文件類型: .py金幣: 1下載: 0 次發布日期: 2021-05-22
- 語言: Python
- 標簽: matplotlib??python??
資源簡介
python實現掃描線填充算法,使用matplotlib模塊將繪制的圖形保存并畫出來,可以畫凹多邊形
代碼片段和文件信息
import?matplotlib.pyplot?as?plt
#?多邊形頂點數
POINTNUM?=?5
#?分辨率
LENGTH?=?600
fig?=?plt.figure(“掃面線填充算法“?figsize=(6?6))
ax?=?fig.add_subplot(1?1?1)
ax.axis([0?LENGTH?0?LENGTH])
#?定義邊的結構
class?XET:
????def?__init__(self?x=0.0?dx=0.0?ymax=0):
????????self.x?=?x
????????self.dx?=?dx
????????self.ymax?=?ymax
????????self.next?=?None
class?Point:
????def?__init__(self?x?y):
????????self.x?=?x
????????self.y?=?y
points?=?[None]?*?POINTNUM
def?polyScan():
????MaxY?=?0
????MinY?=?LENGTH
????for?i?in?range(POINTNUM):
????????if?points[i].y?>?MaxY:
????????????MaxY?=?points[i].y
????????if?points[i].y?????????????MinY?=?points[i].y
????#?初始化AET表
????AET?=?XET()
????#?初始化NET表
????NET?=?[None]?*?LENGTH
????for?i?in?range(MaxY?+?1):
????????NET[i]?=?XET()
????#?掃描并建立NET表
????for?i?in?range(MaxY?+?1):
????????for?j?in?range(POINTNUM):
????????????if?points[j].y?==?i:
????????????????#?一個點跟前面的一個點形成一條線段,跟后面的點也形成線段
????????????????#?如果points[j].y較小就加入
????????????????if?points[(j?-?1?+?POINTNUM)?%?POINTNUM].y?>?points[j].y:
????????????????????p?=?XET()
????????????????????p.x?=?points[j].x
????????????????????p.ymax?=?points[(j?-?1?+?POINTNUM)?%?POINTNUM].y
????????????????????p.dx?=?(points[(j?-?1?+?POINTNUM)?%?POINTNUM].x?-?points[j].x)?/?(
????????????????????????????????points[(j?-?1?+?POINTNUM)?%?POINTNUM].y?-?points[j].y)
????????????????????p.next?=?NET[i].next
????????????????????NET[i].next?=?p
????????????????if?points[(j?+?1?+?POINTNUM)?%?POINTNUM].y?>?points[j].y:
????????????????????p?=?XET()
????????????????????p.x?=?points[j].x
????????????????????p.ymax?=?points[(j?+?1?+?POINTNUM)?%?POINTNUM].y
????????????????????p.dx?=?(points[(j?+?1?+?POINTNUM)?%?POINTNUM].x?-?points
評論
共有 條評論