图形学实验之多边形填充算法

一、建立工程

1、建立单文档的MFC标准工程

2、新建资源transcontrol,并且为其映射类

3、在mainfrm类中添加窗口分割条,重定义OnCreateClient函数

4、在view中,为WM_SIZE映射函数

二、设计交互界面

      程序的交互界面

程序的交互界面

 

使用工具箱中的Group Box 与 Radio Box

   Group Box:使用注意:调节tab按键的顺序,group box 只是逻辑分组,所以一定要调节tab顺序

   Radio  Box: GetCheckedRadioButton(IDC_START,IDC_END);获得选择的条目

 

三、算法学习与实现

1、逐点扫描算法

          原理很简单,逐点判断每一个像素是否在多边形内部,如果在这填充;

 

代码如下:

void CcgGJFillView::Draw_Algorithm_everyPoint(CDC* pDC,COLORREF rgb)
{
 CPoint testPoint ;

 for (testPoint.x = polyRect.minX; testPoint.x < polyRect.maxX; testPoint.x++)
  for (testPoint.y = polyRect.minY; testPoint.y < polyRect.maxY; testPoint.y++)
  {

   if (PointInPolygon(m_pNumbersONE, m_pAccord, testPoint))
    SetPixel(m_pDC->m_hDC,testPoint.x, testPoint.y,rgb);
  }
  
}

 

2、种子算法(只留有根据点的颜色判断的程序)

    基本思想很简单,2个思路

    思路一:根据点的位置:

                          出栈栈顶点,判断当前点是否在图形内部,若在且没有被处理,则处理(即涂色);处理完当前点后在处理四周的点

    思路二:根据点的颜色:

                            出栈栈顶点,判断当前点的颜色是否可以涂色(不是边界颜色,并且未被涂色),若可涂色,则处理(即涂色);处理完当前点后在处理四周的点

 

    注意点:虽然是递归的思想,但是Windows给递归函数分配栈较小,此处应该用栈模拟函数递归;即省时间又省空间

2.1、四连通种子填充算法

void seed44(CPoint seed,COLORREF fill,COLORREF black,COLORREF white,CDC* pDC,BoxRect_t polyRect1,BOOL drawWithA)
{

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值