遇见多边形
几种表示方法:顶点表示、边界表示、内点表示
输入:多边形顶点序列P1到Pn
输出:最佳逼近这个多边形的像素点集
x-扫描线算法
几个问题:
1.当扫描线与多边形顶点相交时,焦点的取舍问题?算几个
策略:交点个数=构成这个定点的两条边位于扫描线上方的条数
2.左闭右开,下闭上开
中心会偏移
3.算法的效率问题。
改进思路:
对于一条扫描线,需要与所有的边求交吗?
扫描线而直线在y方向上都有连贯性,那么交点可以怎么求?(增量计算)
每次都需要排序吗?重新排序的时机:新边加入时
改进后得到的算法叫做:Y向连贯性算法。
Y向连贯性算法
算法的数据结构
- 边表
- 多边形所在位置的纵坐标范围。每个数据项存储的是两个节点中靠下节点坐标与该数据项表示的纵坐标相同的边结点组成的链表。
- 每个结点的数据依次包括:该边靠下节点的横坐标,该边靠上节点的纵坐标(可能需要-1),该边的斜率,指向下一个结点的指针
- 有效边
- 与当前扫描线相交的多边形的彼岸,也称为活性边
- 有效边表
- 把有效边按与扫描线交点x坐标递增的顺序放在一个链表中,此表称为有效边表。
- 有效边表的每个结点
算法过程
算法分析:
优点:
采用增量计算的方法进行交点计算
仅仅在新边加入时排序(边数远小于扫描线数的情况下使用)
缺点:
桶表、链表的维护开销
边标志算法
奇妙想法