今天研究的是利用HTML5的Canvas画图来模拟太阳系运转,首先,在这个太阳系里分为画轨道和画星球两个部分,

对于每一个星球我们要知道它的颜色和公转周期,如下图。

采用面向对象编程的思想,代码如下

stars.html

<!DOCTYPE HTML><html><head></head><body><canvas id="canvas" width="1000" height="1000" style="background:#000">你的浏览器不支持canvas标签!</canvas><script src="stars.js"></script></body>
</html>

stars.js

/******************************************/
/*                                        */
/*   本节代码体现了用JavaScript编写面向对 */
/*   象程序的思想,希望能认真阅读理解。   */
/*                                        */
/******************************************///设置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();}
}//画星球的类
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();               //保存之前的内容ctx.translate(500, 500);  //重置0,0坐标     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");
}var sun = new Sun();
var mercury = new Mercury();
var venus = new Venus();
var earth = new Earth();
var mars = new Mars();
var jupiter = new Jupiter();
var saturn = new Saturn();
var uranus = new Uranus();
var neptune = new Neptune();function Move(){ctx.clearRect(0, 0, 1000, 1000);drawTrack();sun.draw();mercury.draw();venus.draw();earth.draw();mars.draw();jupiter.draw();saturn.draw();uranus.draw();neptune.draw();
}setInterval(Move,10);

运行效果:

HTML5的Canvas画图模拟太阳系运转相关推荐

  1. JS+HTML5的Canvas画图模拟太阳系运转

    查看效果:http://hovertree.com/texiao/html5/9.htm 地球自传 http://hovertree.com/texiao/html5/8.htm 代码如下: < ...

  2. python绘制动态模拟图-如何利用Python动态模拟太阳系运转

    前言 提到太阳系,大家可能会想到哥白尼和他的日心说,或是捍卫.发展日心说的斗士布鲁诺,他们像一缕光一样照亮了那个时代的夜空,对历史感兴趣的小伙伴可以深入了解一下,这里就不多说了. 太阳以巨大的引力使周 ...

  3. 如何利用Python动态模拟太阳系运转

    更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接:好看站 http://www.nrso.net/ 高州阳光论坛https://www.hnthzk.com/ 前 ...

  4. python绘制太阳系_如何利用Python动态模拟太阳系运转

    前言 提到太阳系,大家可能会想到哥白尼和他的日心说,或是捍卫.发展日心说的斗士布鲁诺,他们像一缕光一样照亮了那个时代的夜空,对历史感兴趣的小伙伴可以深入了解一下,这里就不多说了. 太阳以巨大的引力使周 ...

  5. python怎么画地球绕太阳转_如何利用Python动态模拟太阳系运转

    前言 提到太阳系,大家可能会想到哥白尼和他的日心说,或是捍卫.发展日心说的斗士布鲁诺,他们像一缕光一样照亮了那个时代的夜空,对历史感兴趣的小伙伴可以深入了解一下,这里就不多说了. 太阳以巨大的引力使周 ...

  6. 用python画太阳系_用 Python 动态模拟太阳系运转

    提到太阳系,大家可能会想到哥白尼和他的日心说,或是捍卫.发展日心说的斗士布鲁诺,他们像一缕光一样照亮了那个时代的夜空,对历史感兴趣的小伙伴可以深入了解一下,这里就不多说了. 太阳以巨大的引力使周边行星 ...

  7. python模拟太阳系_用 Python 动态模拟太阳系运转

    提到太阳系,大家可能会想到哥白尼和他的日心说,或是捍卫.发展日心说的斗士布鲁诺,他们像一缕光一样照亮了那个时代的夜空,对历史感兴趣的小伙伴可以深入了解一下,这里就不多说了. 太阳以巨大的引力使周边行星 ...

  8. 用 Python 动态模拟太阳系运转

    文 | 野客 来源:Python 技术「ID: pythonall」 提到太阳系,大家可能会想到哥白尼和他的日心说,或是捍卫.发展日心说的斗士布鲁诺,他们像一缕光一样照亮了那个时代的夜空,对历史感兴趣 ...

  9. 用 Python 简单做个 动态模拟太阳系运转 吧

    提到太阳系,大家可能会想到哥白尼和他的日心说,或是捍卫.发展日心说的斗士布鲁诺,他们像一缕光一样照亮了那个时代的夜空,对历史感兴趣的小伙伴可以深入了解一下,这里就不多说了. 太阳以巨大的引力使周边行星 ...

最新文章

  1. 互联网架构师必备技术 Docker仓库与Java应用服务动态发布那些事
  2. C语言经典例86-两个字符串连接
  3. MFC 不存在从 CString 到 char * 的适当转换函数
  4. 天池四月读书会|数据分析金融量化,6场直播,6位大咖,6个项目实战
  5. 中小企业项目的痛VS感人IT团队
  6. java递归mysql生成树_java递归生成树结构的数据
  7. Tomcat安装与优化
  8. COM 组件实现事件、通知
  9. 使用bbscope进行大规模域名收集扫描
  10. 杭电 1142 十字链表存储
  11. python 数字转换为汉字大写
  12. yum安装报错:ImportError: No module named urlgrabber.grabber
  13. JavaScript实现图结构
  14. 计算机组成原理实验二:运算器实验
  15. 微信公众平台开发(二) 微信公众平台示例代码分析
  16. linux ppoe,linux下连接windows2003 ppoe 服务器
  17. 向量空间搜索引擎理论
  18. 4款不错的UI设计软件推荐
  19. 平面设计新手需要注意哪些误区
  20. 青少年使用计算机过度头疼事例,青少年间歇性头疼怎么回事

热门文章

  1. vue指令-单向和双向绑定
  2. Fanout交换器-编写消费者
  3. DoubleCheck双重检查实战及原理解析
  4. spring声明事务与编程事务概述
  5. java 技术点_Java的21个技术点和知识点归纳
  6. emacs python plugin_Windows上配置Emacs来开发Python及用Python扩展Emacs
  7. java调用rocketmq_java操作RocketMQ
  8. Git、TortoiseGit、GitHub、Gitee、GitLab 安装与入门使用
  9. Ogre 2011-11-30
  10. Linux服务器---安装bind