扫描线填充多边形算法详解与代码

您所在的位置:网站首页 x扫描线算法 扫描线填充多边形算法详解与代码

扫描线填充多边形算法详解与代码

2024-01-03 17:21| 来源: 网络整理| 查看: 265

扫描线填充多边形算法详解与代码

首先给出已知信息:多边形结构体里面包含三个信息:顶点个数,顶点和颜色

class MyPolygon { public: int m_VerticeNumber; CPoint m_Vertex[50]; COLORREF m_LineColor; }

思路:   找到多边形的最小y值和最大y值,然后用这个范围内的每一条水平线与多边形相交,通过得到的交点画线段,由此填充整个多边形。   具体通过交点画线段:   1.对存储交点的数组进行排序(从小到大)   2.数组中数据两两一对,填充每对交点间的线段      这样分析下来我们所要做的只有两件事,一是求出扫描线与多边形边的交点,二是对交点数组进行排序。   接下来开始一个一个分析:对于求扫描线与多边形的交点,需要考虑到以下几个特殊情况:   1.扫描线与边重合   扫描线与边重合   2.扫描线与边的交点为顶点   扫描线与边的交点为顶点   具体情况具体分析咯:   对于扫描线与边重合,只需要判断该边的两个顶点的y值是不是一样的,是一样的表示该边水平,因此可以直接重画这条线。否则继续之后的判断。   对于扫描线与顶点重合,大家看上面的图,我画了两种情况,一种是局部极值的顶点,一种不是局部极值的顶点,这两种顶点交点的记录方法还不一样。如果交点是顶点,且为局部极值,这个交点要被连续记录两次;如果交点是顶点,且不是局部极值,这个交点只需要被记录一次。大家可以看图想想,当交点是局部极值顶点是,所要描绘的线段就是该交点,所以记录两次;当交点是顶点,不是局部极值,所要描绘的是该顶点交点到下一个交点这一条线段,所以只能记录一次。   判断一个顶点是否为局部极值,可以通过与顶点关联的两条边的另外两个顶点来判断,通过判断它们是不是在顶点交点的同一侧来得出顶点的极值性:   极值点   非极值点      排序算法:随机快速排序 下面贴上代码:

int getMiny(MyPolygon ThePolygon) { int min = ThePolygon.m_Vertex[0].y; for(int i = 1;iThePolygon.m_Vertex[i].y) min = ThePolygon.m_Vertex[i].y; return min; } int getMaxy(MyPolygon ThePolygon) { int max = ThePolygon.m_Vertex[0].y; for(int i = 1;i//异号 index[temp++] = x; } else//同号 极值点 { index[temp++] = x; index[temp++] = x; } }else if(j1 == 0&&judge[j1]==0) { if((i-ThePolygon.m_Vertex[i1].y)*(i-ThePolygon.m_Vertex[l-1].y)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3