关于星星切边的问题,我想的方法太消耗资源了,而且只适用于星星数少的时候,请问有谁知道精简的算法啊?
我的基本思路就是每生成一个星星就与之前的进行比较计算位置加上半径,但是越到最后比较的就越多,所以如果星星数太多的话还会卡,请问谁有什么比较好的算法么?
哦,这里的代码也写了不让星星出夜空范围的代码,这个比较简单,算一下就好了,
还是求问星星之间切边的算法~
for(var i=0;i<20;i++){
// random()返回一个0~1
// 10~20的随机数
var r=Math.random()*10+10;
var x=Math.random()*canvas.width;
var y=Math.random()*canvas.height;
var a=Math.random()*360;
//防止星星出了星空的边界
if(x+a>canvas.width||y+a>canvas.height||x-a<0||y-a<0){
i--;
continue;
}
//防止星星重叠
for(var j=0;j<stars.length;j++){
console.log("j is "+j);
var maxRadius=r>stars[j].radius?r:stars[j].radius;
if(Math.abs(x-stars[j].x)<maxRadius||Math.abs(y-stars[j].y)<maxRadius){
flag=false;
i--;
break;
}
}
console.log("i is "+i);
if(flag){
var star={
x:x,
y:y,
radius:r
};
stars.push(star);
console.log("产生第"+(i+1)+"个星星");
drawStar(context,x,y,r,r/2,a);
}
flag=true;
}