0

我正在检测沙堆的边界并将其存储到数组中,然后将其保存为文本文件以供以后使用。我将边界存储为文本文件的方式是使用魔杖工具,然后获取选择的属性,这给了我一个表格。然后将表格转换为数组,最后将其存储为文本文件。这样做之后,我注意到上面提到的表格只有边界上“连接点”的(X,Y)坐标,而不是边界的每个像素。

现在当我说以后使用时,我想用各种方法平滑边界并重新绘制它,但我被困在如何从交叉点到完整边界。下面是我的尝试,但在打印输出后我看到大量的 ram 使用。感谢您的帮助和您的时间。

X=newArray(1,5,5,10);
Y=newArray(3,3,8,8);
c=newArray("c1","c2");
//answer should be g=(1,2,3,4,5,5,5,5,5,5,6,7,8,9,10,    --x part   
//                    3,3,3,3,3,4,5,6,7,8,8,8,8,8,8)      --y part
//f=slide(a,2,c);Array.print(f);
g=cmpltarray(X,Y);Array.print(g);

function cmpltarray(Tx,Ty){

    for (i = 0; i < Tx.length-1; i++) {
    if(Tx[i]==Tx[i+1] && Ty[i]!=Ty[i+1])
    {
        l=abs(Ty[i]-Ty[i+1])-1;tempy=newArray(l);tempx=newArray(l);
        for (j = 0; j < l; j++) {
            tempy[j]=Ty[i]+j+1;tempx[j]=Tx[i];
        }
        Tx=slide(Tx,(i+1),tempx);Ty=slide(Ty,(i+1),tempy);i=i+l;
    }
    if(Ty[i]==Ty[i+1] && Tx[i]!=Tx[i+1])
    {
        l=abs(Tx[i]-Tx[i+1])-1;tempy=newArray(l);tempx=newArray(l);
        for (j = 0; j < l; j++) {
            tempx[j]=Tx[i]+j+1;tempy[j]=Ty[i];
        }
        Tx=slide(Tx,(i+1),tempx);Ty=slide(Ty,(i+1),tempy);i=i+l;
    }
        }
        return Array.concat(Tx,Ty);
}
function slide(array,n,data){
        array=Array.concat(Array.slice(array,0,n),data,Array.slice(array,n,array.length));
        return array;
    }

4

0 回答 0