角度制和弧度制

  生活中通常是用角度度来理解的,代码里都是用弧度制来计算。

  角度转弧度:DEG_TO_RAD = Math.PI / 180

  弧度装角度:RAD_TO_DEG = 180 / Math.PI

  

  正弦:Math.sin

  波形:

  y轴的值会在-1和1的区间波动,只要我们指定一个范围值,比如50,乘于这个范围值就能得到一个在50~-50间的波形。应用于代码中,实现一个小球按正弦波运动的例子,设定相应的变量:

    angle: 角度(即x轴的值)

    range: 范围(半径)

    speed: 角速度 (x变化的速度)

var SinWaveMove = __class__(Ball, {

    __init__: function () {
Ball.call(this)
this.init()
}, init: function () {
// 设置球在浏览器的左中位置
this.y = stage.height / 2 this.angle = 0
this.speed = 0.01
this.range = 500
}, onenter: function () {
this.x = Math.sin(this.angle) * this.range
} })

  余弦:Math.cos

  余弦的波形效果其实也差不多,可以自己实验一下,把上面的Math.sin替换成Math.cos即可.

  圆周运动

  其实就是正统函数和余弦函数配合使用,x轴的值用Math.sin算y轴的值用Math.cos算,共同的半径,同一个角度值来算。小球做圆周运动的例子:

var CircularWave = __class__(Ball, {

    __init__: function () {
Ball.call(this)
this.init()
}, init: function () {
// 设置球在浏览器的中心位置
this.x = this.cx = stage.width / 2
this.y = this.cy = stage.height / 2 this.angle = 0
this.speed = 0.01
this.radius = 500
}, onenter: function () {
this.x = Math.sin(this.angle) * this.radius + this.cx
this.y = Math.cos(this.angle) * this.radius + this.cy
} })

  椭圆运动

  其实是圆周运动一样,只是把x轴和y轴的半径设置成不同大小的值就OK了,可以自己试试。

  反正切:Math.atan2

  因为这个比较有用,用于计算出两点间的偏移角度:angle = Math.atan2(y2 - y1, x2 - x1)  // 这个得到的结果是弧度制的。

  一个箭头指向鼠标的demo:

var Arrow = __class__(Sprite, {

    __init__: function (attr) {
Sprite.call(this, attr)
}, init: function () {
this.x = stage.width / 2
this.y = stage.height / 2
}, draw: function (ctx) {
// 画出一个红色的箭头
ctx.fillStyle = 'red'
ctx.beginPath()
ctx.moveTo(-50, -50)
ctx.lineTo(0, -50)
ctx.lineTo(0, -100)
ctx.lineTo(50, 0)
ctx.lineTo(0, 100)
ctx.lineTo(0, 50)
ctx.lineTo(-50, 50)
ctx.lineTo(-50, -50)
ctx.fill()
} }) var arrow = new Arrow()
stage.add(arrow) var RAD_TO_DEG = 180 / Math.PI document.body.onmouseover = function (e) {
var rotate = Math.atan2(e.y - arrow.y, e.x - arrow.x)
arrow.rotation = rotate * RAD_TO_DEG
}

Make Things Move -- Javascript html5版(三)三角函数形式的动画的更多相关文章

  1. Make Things Move -- Javascript html5版(一)文件目录结构和工具方法准备

    从这一篇开始,就来开始我们的make things move之旅吧 在此之前,要知道ActionScript(AS)的语法和JS是不一样的,AS是相对于JS而言更好的支持了面向对象的特性,所以我们可以 ...

  2. Make Things Move -- Javascript html5版(二)实现最基本的Sprite类和stage管理对象

    现在这几篇写的都是比较基础的东西,有过相应开发经验的朋友可直接忽略啦. 计算机模拟的动画都是由很多静态的一连串影像(sprite)在一定帧率(fps)内逐帧播放出来的. 对于js来说,我们可以用提供的 ...

  3. javaScript高程第三版读书笔记

    看完<dom编程艺术>现在准备读进阶版的js高程了,由于篇幅较长,所以利用刚看完<dom编程艺术>学到的知识写了段JavaScript代码,来折叠各章的内容.并且应用到了< ...

  4. JavaScript+html5 canvas实现本地截图教程

    这篇文章主要介绍了JavaScript+html5 canvas实现本地截图教程,对截图功能感兴趣的小伙伴们可以参考一下 最近有时间了解了下html5的各API,发现新浪微博的头像设置是使用canva ...

  5. HTML5版的String Avoider小游戏

    HTML5版的String Avoider小游戏 http://www.newgrounds.com/portal/view/300760 蛮简单也蛮考验耐心,从游戏起始点移动鼠标到终点位置,鼠标移动 ...

  6. javascript+HTMl5游戏下载,开发一个都能月薪上万!舅服你

    HTML5时代已经到来许久了,你是否已经掌握了那么一点呢?今天小编给大家讲讲h5的折叠多设备.跨平台特性, 即用HTML5制作游戏.相比flash,HTML5更加灵活方便,随着浏览器技术的不断升级,H ...

  7. Javascript 创建对象的三种方法及比较【转载+整理】

    https://developer.mozilla.org/zh-CN/docs/JavaScript/Guide/Inheritance_and_the_prototype_chain 本文内容 引 ...

  8. js操作文件 HTML5版

    js操作文件 HTML5版,有需要的朋友可以参考下. <!DOCTYPE html> <html> <head> <title>JSFileReader ...

  9. JavaScript学习记录三

    title: JavaScript学习记录三 toc: true date: 2018-09-14 23:51:22 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...

随机推荐

  1. iOS根据获取的月和日星座名称

    /** * 依据月和日的下标获取星座名 * * @param monthIndex 月的下标 * @param dayIndex 日的下标 * * @return 星座名 */ - (NSString ...

  2. XCL-Charts圈图

    我不知道是不是叫图,无论如何,所以叫它. 图形是今天我Circliful这个jQuery 插件上看到的. 认为非常好看. 就想把它实现出来,由于之前画过环形图.且我如今的图表基类基本已成型,所以非常快 ...

  3. 【百度地图API】如何判断点击的是地图还是覆盖物?

    原文:[百度地图API]如何判断点击的是地图还是覆盖物? 摘要:很多API爱好者问我,为什么我点击的是marker,而map也会响应该事件呢?怎样才能判断,我点击的是标注,还是地图呢?下面一起来看看. ...

  4. java中IO写文件工具类

    以下是一些依据经常使用java类进行组装的对文件进行操作的类,平时,我更喜欢使用Jodd.io中提供的一些对文件的操作类,里面的方法写的简单易懂. 当中jodd中提供的JavaUtil类中提供的方法足 ...

  5. 杭电dp题集,附链接还有解题报告!!!!!

    Robberies 点击打开链接 背包;第一次做的时候把概率当做背包(放大100000倍化为整数):在此范围内最多能抢多少钱  最脑残的是把总的概率以为是抢N家银行的概率之和- 把状态转移方程写成了f ...

  6. Oracle分区表转换

    Oracle普通表—>分区表转换(9亿数据量) 背景介绍: 环境:Linux 5.5 + Oracle 10.2.0.4 某普通表T,由于前期设计不当没有分区,如今几年来的数据量已达9亿+, 空 ...

  7. TLD跟踪算法优化(一)并行化

    才学疏浅,仅仅言片语,仅仅求志同道的朋友一起交流研究. 并行化不算是算法的改进,仅仅是追求执行的实时性. 简要列举一个样例: TLD算法的C++版本号源代码里: LKTracker::trackf2f ...

  8. OracleServiceORCL服务不见了怎么办

    用管理员身份运行命令提示符(CMD) 然后输入“oradim -new -sid orcl”即可

  9. youcompleteme install and configure

    三四年前我配置vim插件的时候还都是手动配置,还没有听说vundle这个vim插件管理工具,现在配置vim插件的时候基本上都用vundle,这个插件也确实是方便快捷,只不过这东西时能话了就不清楚里面的 ...

  10. Android adb端口转发调试助手Packet Sender

    相信大家做过安卓开发或者安卓自动化测试开发的都离不开adb这个Android Debug Bridge这个工具,该工具有个很重要的功能就是端口转发.比如你在目标安卓机器端建立了一个服务来处理获取当前界 ...