日期:2014-05-16 浏览次数:20968 次
今天研究的是利用HTML5的Cnavas画图来模拟太阳系运转,首先,在这个太阳系里分为画轨道和画星球两个部分,对
于每一个星球我们要知道它的颜色和公转周期,如下图。
采用面向对象编程的思想,代码如下:
<!DOCTYPE HTML> <html> <head></head> <body> <canvas id="canvas" width="1000" height="1000" style="background:#000"> 你的浏览器不支持canvas标签! </canvas> <script> //设置2d绘图环境 var ctx = document.getElementById("canvas").getContext("2d"); //画轨道 function drawTrack(){ for(var i=0;i<8;i++){ ctx.beginPath(); ctx.arc(500,500,(i+1)*50,0,360,false); ctx.closePath(); ctx.strokeStyle = "#fff"; ctx.stroke(); } } drawTrack(); //画星球 function Star(x,y,radius,cycle,sColor,eColor){ //星球需要哪些属性 //星球的坐标点 this.x = x; this.y = y; //星球的半径 this.radius = radius; //设置周期 this.cycle = cycle; //星球的颜色,起始颜色和结束颜色 this.sColor = sColor; this.eColor = eColor; this.color = null; //设置一个计时器 this.time = 0; this.draw = function(){ //保存之前的内容 ctx.save(); //重置0,0坐标 ctx.translate(500,500); //旋转角度 ctx.rotate(this.time*(360/this.cycle)*Math.PI/180); //画星球 ctx.beginPath(); ctx.arc(this.x,this.y,this.radius,0,360,false); ctx.closePath(); //设置星球的填充颜色 this.color = ctx.createRadialGradient(this.x,this.y,0,this.x,this.y,this.radius); this.color.addColorStop(0,this.sColor); this.color.addColorStop(1,this.eColor); ctx.fillStyle = this.color; ctx.fill(); //恢复之前画布的内容 ctx.restore(); this.time += 1; } } //创建一个太阳的构造函数 function Sun(){ Star.call(this,0,0,20,0,"#FFFF00","#FF9900"); } //创建一个水星的构造函数 function Mercury(){ Star.call(this,0,-50,10,87.70,"#A69697","#5C3E40"); } //创建一个金星的构造函数 function Venus(){ Star.call(this,0,-100,10,224.701,"#C4BBAC","#1F1315"); } //创建一个地球的构造函数 function Earth(){ Star.call(this,0,-150,10,365.2422,"#78B1E8","#050C12"); } //创建一个火星的构造函数 function Mars(){ Star.call(this,0,-200,10,686.98,"#CEC9B6","#76422D"); } //创建一个木星的构造函数 function Jupiter(){ Star.call(this,0,-250,10,4332.589,"#C0A48E","#322222"); } //创建一个土星的构造函数 function Saturn(){ Star.call(this,0,-300,10,10759.5,"#F7F9E3","#5C4533"); } //创建一个天王星的构造函数 function Uranus(){ Star.call(this,0,-350,10,30799.095,"#A7E1E5","#19243A"); } //创建一个海王星的构造函数 function Neptune(){ Star.call(this,0,-400,10,60152,"#0661B2","#1E3B73");