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

标签 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 的示例代码?

最佳答案

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/

关于javascript - 选择提供的形状内的所有框(魔术棒工具),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23727662/

相关文章:

javascript - Jquery `.click` 提交所有表单

c - C 中的算术级数的结果不正确

java - 简单的计算器操作

math - float 学坏了吗?

javascript - 如何将事件绑定(bind)到 Tabbing Off 元素?

javascript - 无论如何,webview 都无法刷新

javascript - 从左到右然后从右到左动画div

database - 大数据库搜索推荐/建议

java - 在给定的 char 数组中具有所有可能组合/排列的暴力破解算法

C# 大树迭代