Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 选择具有所提供形状的所有框(魔术棒工具)_Javascript_Algorithm_Math - Fatal编程技术网

Javascript 选择具有所提供形状的所有框(魔术棒工具)

Javascript 选择具有所提供形状的所有框(魔术棒工具),javascript,algorithm,math,Javascript,Algorithm,Math,我正在尝试重新创建魔杖工具,它可以选择形状中的所有东西。红色框定义了形状,蓝色框是用户单击的位置,如图1所示:我有用户单击位置的代码,如x,y,并且它们是像素数据 图1 我有一个二维数组,例如,一个示例圆: var boxes = [ [0,0,0,0,0,0,0,0,0,0], [0,0,1,1,1,1,0,0,0,0], [1,1,0,0,0,0,1,0,0,0], [1,0,0,0,0,0,0,1,0,0], [1,0,0,0,0,0,0,1,0,

我正在尝试重新创建魔杖工具,它可以选择形状中的所有东西。红色框定义了形状,蓝色框是用户单击的位置,如图1所示:我有用户单击位置的代码,如
x,y
,并且它们是像素数据

图1

我有一个二维数组,例如,一个示例圆:

var boxes = [
    [0,0,0,0,0,0,0,0,0,0],
    [0,0,1,1,1,1,0,0,0,0],
    [1,1,0,0,0,0,1,0,0,0],
    [1,0,0,0,0,0,0,1,0,0],
    [1,0,0,0,0,0,0,1,0,0],
    [1,1,1,0,0,0,0,1,0,0],
    [0,0,0,1,1,1,1,0,0,0],
]


我可以使用什么最佳算法将圆形中的所有
0
变为
2
?是否有我可以用于Javascript的示例代码?

函数泛光填充(框,x\u单击,y\u单击){
function floodFill(boxes, x_click, y_click) {

    var cells = [], x=x_click, y = y_click, arr=boxes.slice(0), hei=arr.length, wid=arr[0].length;
    function check(y,x){
        if(arr[y][x]==0){arr[y][x]=2;cells.push({x:x,y:y})}
    }
    if (arr[y][x]==1){return arr;}
    cells.push({x:x,y:y});
    arr[y][x]==2;
    while(cells.length!=0){
        var cell=cells.slice()[0];
        cells.shift();
        if(cell.y>0){
            check(cell.y-1,cell.x);
        }
        if(cell.y+1<hei){
            check(cell.y+1,cell.x)
        }
        if(cell.x>0){
            check(cell.y,cell.x-1);
        }
        if(cell.x+1<wid){
            check(cell.y,cell.x+1)
        }        
    }
    return arr;
}
变量单元格=[],x=x\u单击,y=y\u单击,arr=box.slice(0),hei=arr.length,wid=arr[0]。长度; 功能检查(y,x){ 如果(arr[y][x]==0{arr[y][x]=2;cells.push({x:x,y:y})} } 如果(arr[y][x]==1){return arr;} push({x:x,y:y}); arr[y][x]==2; while(单元格长度!=0){ var cell=cells.slice()[0]; 细胞移位(); 如果(单元格y>0){ 检查(单元格y-1、单元格x); } 如果(单元格y+10){ 检查(单元格y、单元格x-1); } if(cell.x+1Google)“洪水填充算法”,通常使用递归实现。
function floodFill(boxes, x_click, y_click) {

    var cells = [], x=x_click, y = y_click, arr=boxes.slice(0), hei=arr.length, wid=arr[0].length;
    function check(y,x){
        if(arr[y][x]==0){arr[y][x]=2;cells.push({x:x,y:y})}
    }
    if (arr[y][x]==1){return arr;}
    cells.push({x:x,y:y});
    arr[y][x]==2;
    while(cells.length!=0){
        var cell=cells.slice()[0];
        cells.shift();
        if(cell.y>0){
            check(cell.y-1,cell.x);
        }
        if(cell.y+1<hei){
            check(cell.y+1,cell.x)
        }
        if(cell.x>0){
            check(cell.y,cell.x-1);
        }
        if(cell.x+1<wid){
            check(cell.y,cell.x+1)
        }        
    }
    return arr;
}