Javascript和细分,在for循环中崩溃浏览器

Javascript和细分,在for循环中崩溃浏览器,javascript,geometry,paperjs,Javascript,Geometry,Paperjs,我正在使用paper.js制作一些生成性的视觉效果,计划是定义一个随机形状,对其进行细分,然后将这些点随机化(达到不同程度)。现在,浏览器在尝试细分多边形时崩溃 我对用Javascript做这些事情还比较陌生,所以可能我对它期望太高了,显然,密集for循环中的崩溃只是会发生的事情。有人有什么建议吗 var Cloud = function(point) { this.origin = point; this.initBound = new Size(600,200);

我正在使用paper.js制作一些生成性的视觉效果,计划是定义一个随机形状,对其进行细分,然后将这些点随机化(达到不同程度)。现在,浏览器在尝试细分多边形时崩溃

我对用Javascript做这些事情还比较陌生,所以可能我对它期望太高了,显然,密集for循环中的崩溃只是会发生的事情。有人有什么建议吗

var Cloud = function(point) {
    this.origin = point;
    this.initBound = new Size(600,200); 
    this.RoM = 40;

    var numsides = 6;
    var scalingFactor = new Point(1,this.initBound.height/this.initBound.width);

    var cloud = new Path.RegularPolygon({
        center: this.origin,
        sides: numsides,
        radius: this.initBound.width/2,
        strokeColor: 'black'
    });

    cloud.scaling = scalingFactor;

    var initBoundBox = new Path.Rectangle({
        point: new Point(point.x-this.initBound.width/2,point.y-this.initBound.height/2),
        size: this.initBound,
        strokeColor: 'red'
    });

    for(var i=0;i<numsides;i++){
        var px = cloud.segments[i].point.x;
        var py = cloud.segments[i].point.y;

        var x = Math.floor(Math.random()*( (px+this.RoM)-(px-this.RoM)+1 ) + (px-this.RoM) );
        var y = Math.floor(Math.random()*( (py+this.RoM)-(py-this.RoM)+1 ) + (py-this.RoM) );

        var tmpP = new Point(x,y);
        cloud.segments[i].point = tmpP;
    }

    for(var i=0;i<cloud.segments.length-1;i++){
        var mdPnt = new Point((cloud.segments[i].point.x+cloud.segments[i+1].point.x)/2,(cloud.segments[i].point.y+cloud.segments[i+1].point.y)/2); 
        cloud.add(i,mdPnt); //breaking here
    }   

    //cloud.smooth();
}

new Cloud(new Point(500,300)); 
var Cloud=函数(点){
这个原点=点;
this.initBound=新尺寸(600200);
这个.RoM=40;
var numsides=6;
var scalingFactor=新点(1,this.initBound.height/this.initBound.width);
var cloud=新路径。规则多边形({
中心:这是我的起源,
侧面:裸体,
半径:this.initBound.width/2,
strokeColor:“黑色”
});
cloud.scaling=缩放因子;
var initBoundBox=新路径。矩形({
点:新点(点.x-this.initBound.width/2,点.y-this.initBound.height/2),
大小:this.initBound,
strokeColor:“红色”
});

for(var i=0;i在上一个for循环中,您在每次迭代中添加了一个段,从而将cloud.segments.length增加了一个。您的循环永远不会结束。您可以通过增加2而不是1,或者找到更好的二分法例程来缓解这一问题

简言之,尝试将此作为起点:

for(var i=0;i<cloud.segments.length-1;i+=2){
    var mdPnt = new Point((cloud.segments[i].point.x+cloud.segments[i+1].point.x)/2,(cloud.segments[i].point.y+cloud.segments[i+1].point.y)/2); 
    cloud.add(i,mdPnt); //breaking here
}  

for(var i=0;i它到底是在哪里崩溃的,它是不是在一条消息中崩溃的?在cloud.add()崩溃)在第二个for循环中。没有消息,只是让Firefox停止。哦,哇,这太有意义了。谢谢你,我会尽快尝试。如果我单独存储初始段长度的值,然后继续将每个值存储在一个数组中,这样我就可以进行多个级别的二等分呢?有很多方法可以做到这一点,但可能最容易实现se
曲线。除以(参数)