Javascript和细分,在for循环中崩溃浏览器
我正在使用paper.js制作一些生成性的视觉效果,计划是定义一个随机形状,对其进行细分,然后将这些点随机化(达到不同程度)。现在,浏览器在尝试细分多边形时崩溃 我对用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);
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曲线。除以(参数)
。