我正在研究云用户paperjs的可视化,我无法找出动态创建组的最有效方法。
当一个云形状与另一个云形状相交时,它们就会变成一个组(paperjs中的复合路径),它工作正常,但可能有许多不同的组,这是我的困惑所在。
目前我检查交集,当两个相交时,我创建一个引用这两个的新tmpGroup。
Cloud.prototype.checkIntersection = function() {
for(var i=0;i<cloudArray.length;i++){ //go through all clouds
if(this.path !== cloudArray[i].path){ //prevent self-check
if(this.path.intersects(cloudArray[i].path)){ //if intersects
tmpGrp = [this.path,cloudArray[i].path]; //create a tmpGrp
groupClouds(tmpGrp);
}
}
}
}
然后我无法弄清楚......
function groupClouds(tmpGrp){
if(grps.length > 0){ //if there are multiple distinct groups
for(var i=0;i<grps.length;i++){ //loop through all groups
//if(tmpGrp !== grps[i]){ //broken, expected to be able to compare
//arrays easier in JS
grps.push(tmpGrp); //add pair of intersecting paths to a new group
//}
}
}else{
grps[0] = tmpGrp; //if none are defined, the first will be the tmpGrp
}
}
有没有人在这种情况下有任何建议?我建议创建一个可以像这样引用每个组的数组:
Grp[i][group] = [1,2,5] //all objects in pair
Grp[i][pool] = [3,4] //all objects remaining
但我似乎无法正确实现。