freeCodeCamp/guide/chinese/algorithms/boundary-fill/index.md

43 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: Boundary Fill
localeTitle: 边界填充
---
## 边界填充
边界填充是计算机图形中经常使用的算法,用于在具有相同边界的闭合多边形内填充所需颜色 所有方面的颜色。
最接近的算法实现是基于堆栈的递归函数。
### 工作:
问题非常简单,通常遵循以下步骤:
1. 取起点和边界颜色的位置。
2. 决定是否想要沿4个方向NSWE或8个方向NSWENWNESWSE行进。
3. 选择填充颜色。
4. 沿着那些方向旅行。
5. 如果您着陆的像素不是填充颜色或边界颜色,请将其替换为填充颜色。
6. 重复4和5直到你到达边界内的任何地方。
### 某些限制:
* 对于多边形的所有边,边界颜色应该相同。
* 起点应在多边形内。
### 代码片段:
```
void boundary_fill(int pos_x, int pos_y, int boundary_color, int fill_color)
{
current_color= getpixel(pos_x,pos_y); //get the color of the current pixel position
if( current_color!= boundary_color || currrent_color != fill_color) // if pixel not already filled or part of the boundary then
{
putpixel(pos_x,pos_y,fill_color); //change the color for this pixel to the desired fill_color
boundary_fill(pos_x + 1, pos_y,boundary_color,fill_color); // perform same function for the east pixel
boundary_fill(pos_x - 1, pos_y,boundary_color,fill_color); // perform same function for the west pixel
boundary_fill(pos_x, pos_y + 1,boundary_color,fill_color); // perform same function for the north pixel
boundary_fill(pos_x, pos_y - 1,boundary_color,fill_color); // perform same function for the south pixel
}
}
```
从给定的代码中您可以看到对于您登陆的任何像素首先要检查是否可以将其更改为fill\_color然后执行此操作 对于它的邻居,直到检查了边界内的所有像素。