• 大小: 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:
            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

评论

共有 条评论