我看到这个解决方案,它似乎能够在没有重叠的情况下聚类具有“一致”形状的元素,但如果形状更加复杂呢,例如下面的形状:
我开始尝试将形状简化为最基本的形式,然后检查元素是否在实际形状的坐标内,但那似乎需要进行很多潜在的计算,而我希望简化它。非常感谢您的建议!谢谢!
JS Fiddle 参考:
var tilesize = 18, tilecount = 15;
var gRows = Math.floor($(".container").innerWidth()/tilesize);
var gCols = Math.floor($('.container').innerHeight()/tilesize);
var vals = _.shuffle(_.range(tilecount));
var xpos = _.shuffle(_.range(gRows));
var ypos = _.shuffle(_.range(gCols));
_.each(vals, function(d,i){
var $newdiv = $('<div/>').addClass("tile");
$newdiv.css({
'position':'absolute',
'left':(xpos[i] * tilesize)+'px',
'top':(ypos[i] * tilesize)+'px'
}).appendTo( '.container' ).html(d);
});
编辑
这个例子可以在定义的形状内随机聚类,但由于该形状不是正方形,我需要先将SVG对象转换为画布元素,并通过类似方法运行代码进行一些测试。