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

时间:2014-05-18 22:48:31

标签: javascript algorithm math

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

enter image description here

图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],
]

$("main").on("mousedown", function(e) 
{
    var offset = $(this).offset();

    var x = e.pageX-offset.left;
    var y = e.pageY-offset.top;

    // ...
});

<小时/> 我可以使用哪种最佳算法将圆形状中的所有0转换为2?我可以使用Javascript的示例代码吗?

1 个答案:

答案 0 :(得分:1)

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;
}

完全摆弄你的例子:http://jsfiddle.net/Dz9nY/1/