为了账号安全,请及时绑定邮箱和手机立即绑定

关于星星不重复

我做一个判断,判断两个大圆的弧线坐标不一样,这样可以实现不重叠么,

正在回答

2 回答

var stars =[];
	$(function(){
		var canvas=$("#canvas");
		canvas.width=800;
		canvas.height=800;
		var context=canvas[0].getContext("2d");
		
		context.fillStyle="black";
		context.fillRect(0,0,canvas.width,canvas.height);
		addStars();
		upadteStars();
		console.log(stars.length);
		drowStarSky(context);

	})
//添加200个随机星星到星星的数组
function addStars() {
	// body...
		for (var i = 0; i < 200; i++) {
			var star={
 					r:Math.random()*10+10,
 					x:Math.random()*(canvas.width-40)+20,
 					y:Math.random()*(canvas.height-40)+20,
 					a:Math.random()*360
 				}
 				stars.push(star);
		};
}
//去掉重合的星星
	function upadteStars () {
			for (var i = 0; i < stars.length; i++) {
			for (var j = i+1; j < stars.length; j++) {
				var a=Math.pow(stars[i].x-stars[j].x,2);
				var b=Math.pow(stars[i].y-stars[j].y,2);
				var c=Math.pow(stars[i].r+stars[j].r,2)
				if(a+b<c){
					stars.splice(j,1);
				}
				
			};
			
		};
		
	}
	//将不重合的星星全部画入画布
	function drowStarSky(context){
		for (var i = 0; i < stars.length; i++) {
			drowStar(stars[i].r/2,stars[i].r,stars[i].x,stars[i].y,context,stars[i].a);
		};

	}
	//画一个星星

	function drowStar (r,R,x,y,ctx,rot) {
		ctx.beginPath();
		for (var i = 0; i < 5; i++) {
			ctx.lineTo(Math.cos((18+i*72-rot)/180*Math.PI)*R+x,-Math.sin((18+i*72-rot)/180*Math.PI)*R+y);
			ctx.lineTo(Math.cos((54+i*72-rot)/180*Math.PI)*r+x,-Math.sin((54+i*72-rot)/180*Math.PI)*r+y)

		};
		ctx.closePath();

		ctx.lineJoin="round";
		ctx.lineStyle="#058";
		ctx.lineWidth=5;
		ctx.fillStyle="yellow"
		ctx.fill();
		ctx.stroke();

	}


5 回复 有任何疑惑可以回复我~
#1

CoolHuan

主要是圆心距离大于半径之和。兄弟给个赞。
2016-06-17 回复 有任何疑惑可以回复我~
#2

blablabla 回复 CoolHuan

星星多了就不行
2016-08-18 回复 有任何疑惑可以回复我~

应该不可以

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Canvas绘图详解
  • 参与学习       72895    人
  • 解答问题       422    个

Canvas系列教程第二课,详解Canvas各接口,让同学彻底掌握Canvas绘图

进入课程

关于星星不重复

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信