这个可以实现星星不重复
for (var i = 0; i < 100; i++) {
var sum=0;
var aStar={
R:Math.random()*10+10,
x:Math.random()*460+20,
y:Math.random()*460+20,
a:Math.random()*360 }
if (stars.length==0) {
stars.push(aStar);
console.log('x')
} else{
//第二个以上的星星都要和数组stars里的星星进行比较,和数组里面全部的星星比较完后sum等于star.length,则证明aStar和所有已经存在的星星不重复,就push到数组
for (var i = 0; i < stars.length; i++) {
if (Math.sqrt(Math.pow(aStar.x-stars[i].x,2)+Math.pow(aStar.y-stars[i].y,2))>aStar.R+stars[i].R) {
sum++; };
if (sum==stars.length) {
stars.push(aStar);
};};
};
console.log("星星个数: "+stars.length) };
for (var i = 0; i < stars.length; i++) { drawStar(context,stars[i].R,stars[i].R/2,stars[i].x,stars[i].y,stars[i].a);};
4赞 · 3采集
leavie
2016-04-07
隨機半徑
截图
0赞 · 0采集
穆克网abc
2016-03-10
<body>
<canvas id="cvs" style="border:blue solid 1px;display: block; margin:0 auto;">不支持canvas</canvas>
</body>
<script type="text/javascript">
var cvs=document.getElementById("cvs");
cvs.width=600;
cvs.height=600;
var context=cvs.getContext("2d");
context.fillStyle="black";
context.fillRect(0,0,cvs.width,cvs.height);
for(var j=0;j<200;j++){
var r=Math.random()*10+10;
var x=Math.random()*600;
var y=Math.random()*600;
var a=Math.random()*360;
drawStar(context,r/2,r,x,y,a);
}
function drawStar(cnt,r,R,x,y,rot){
cnt.beginPath();
if(!rot) rot=0;
for(var i=0;i<5;i++){
cnt.lineTo(Math.cos((18+i*72-rot)/180*Math.PI)*R+x,-Math.sin((18+i*72-rot)/180*Math.PI)*R+y);
cnt.lineTo(Math.cos((54+i*72-rot)/180*Math.PI)*r+x,-Math.sin((54+i*72-rot)/180*Math.PI)*r+y);
}
cnt.closePath();
cnt.lineWidth=10;
cnt.strokeStyle="yellow";
cnt.fillStyle="yellow";
cnt.lineJoin="round";
cnt.stroke();
cnt.fill();
}
</script>