多边形填充|扫描线算法

时间:2018-07-08 11:03:53

标签: algorithm polygon fill polyfills

我正在使用Win32 API用C ++开发类似paper.io的游戏。我的游戏数据存储在以下数组中:

1 =玩家的头

2 =玩家的基地

3 =玩家的尾巴


        
  1. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,< / li>     
        
  2. 0,0, 3,3,3,3,3,3,3,3,3, 0,0,0, 3,3,3,3,< / strong> 0,0,0,0,
  3.     
        
  4. 0,0, 3, 0,0,0,0,0,0,0, 3, 0,0,0, 3, 0,0, 3, 0,0,0,0,
  5.     
        
  6. 0,0, 3, 0,0,0,0,0,0,0, 3,3,3,3,3, 0,0 , 3, 0,0,0,0,
  7.     
        
  8. 0,0, 3, 0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,< / strong> 0,0,0,0,
  9.     
        
  10. 0,0, 2,2,2,2,2,2,2,2,2, 0,0,0,0,0,0, 3,3 ,3、3 0
  11.     
        
  12. 0,0, 2,2,2,2,2,2,2,2,2, 0,0,0,0,0,0,0,0,0, 3 0
  13.     
        
  14. 0,0, 2,2,2,2,2,2,2,2,2, 1、3、3、3、3、3、3、3 ,3、3 0
  15.     
        
  16. 0,0, 2,2,2,2,2,2,2,2,2, 0,0,0,0,0,0,0,0,0, 0,0,0,
  17.     
        
  18. 0,0, 2,2,2,2,2,2,2,2,2, 0,0,0,0,0,0,0,0,0, 0,0,0,
  19.     
        
  20. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,< / li>

现在,我想用数字2(玩家的底部)填充多边形(玩家的尾巴)。

Scan Line Algorithm

  

有效方法:

     
    
        
  1. 如果我扫描5.行,则前3个触发算法并切换绘画功能。接下来的3个再次切换它会再次停止绘画功能
  2.     
  
     

问题:

     
    
        
  1. 如果我扫描第2行,则每隔3切换一次绘画功能,并且在该行之后,它将绘画更多,因为它的数量为奇数。
  2.     
  
     

解决方案:

     
    
        
  1. 切换从零到非零(以及从非零到零)的过渡
  2.     
  

Boundary Fill Algorithm

  

问题:

     
    
        
  1. 我需要找到开始的中间/点,在多边形中
  2.     
  

1 个答案:

答案 0 :(得分:0)

有许多特殊情况使得很难确定哪些区域是新基地内部还是外部区域,但这是简单可靠的:

  1. 从外边缘开始进行洪水填充,以找到底部为 not 的区域。该填充可以覆盖除1、2和3之外的任何颜色
  2. 用颜色2填充所有其他东西以建立新的基地。