动画原理——绘制正弦函数&环绕运动&椭圆运动

书籍名称:HTML5-Animation-with-JavaScript

书籍源码:https://github.com/lamberta/html5-animation

 1.正弦函数。x位置递增,y位置用sin生成。

这段代码是不需要ball.js的。

代码如下:

<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Wave 2</title>
    <link rel="stylesheet" href="../include/style.css">
  </head>
  <body>
    <header>
      Example from <a href="http://amzn.com/1430236655?tag=html5anim-20"><em>Foundation HTML5 Animation with JavaScript</em></a>
    </header>
    <canvas id="canvas" width="400" height="400"></canvas>

    <script src="../include/utils.js"></script>
    <script>
    window.onload = function () {
      var canvas = document.getElementById(‘canvas‘),
          context = canvas.getContext(‘2d‘),
          angle = 0,
          range = 50,
          centerY = canvas.height / 2,
          xspeed = 1,
          yspeed = 0.05,
          xpos = 0,
          ypos = centerY;

      context.lineWidth = 2;

      (function drawFrame () {
        window.requestAnimationFrame(drawFrame, canvas);

        context.beginPath();
        context.moveTo(xpos, ypos);
        //Calculate the new position.
        xpos += xspeed;
        angle += yspeed;
        ypos = centerY + Math.sin(angle) * range;
        context.lineTo(xpos, ypos);
        context.stroke();
      }());

    };
    </script>
  </body>
</html>

2.做环绕运动,就是求旋转角度对应在圆上的坐标,由下图可以看出x的值是半径r*cos(angle),而y则为r*sin(angle),由于canvas的坐标不同于传统的坐标系,大家自行与传统坐标系区别开。

椭圆运动则是某方向值偏大。

上代码:08-circle.html

<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Circle</title>
    <link rel="stylesheet" href="../include/style.css">
  </head>
  <body>
    <header>
      Example from <a href="http://amzn.com/1430236655?tag=html5anim-20"><em>Foundation HTML5 Animation with JavaScript</em></a>
    </header>
    <canvas id="canvas" width="400" height="400"></canvas>

    <script src="../include/utils.js"></script>
    <script src="./classes/ball.js"></script>
    <script>
    window.onload = function () {
      var canvas = document.getElementById(‘canvas‘),
          context = canvas.getContext(‘2d‘),
          ball = new Ball(),
          angle = 0,
          centerX = canvas.width / 2,
          centerY = canvas.height / 2,
          radius = 50,
          speed = 0.05;

      (function drawFrame () {
        window.requestAnimationFrame(drawFrame, canvas);
        context.clearRect(0, 0, canvas.width, canvas.height);

        ball.x = centerX + Math.cos(angle) * radius;
        ball.y = centerY + Math.sin(angle) * radius;
        angle += speed;
        ball.draw(context);
      }());
    };
    </script>
  </body>
</html>

09-oval.html

<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Oval</title>
    <link rel="stylesheet" href="../include/style.css">
  </head>
  <body>
    <header>
      Example from <a href="http://amzn.com/1430236655?tag=html5anim-20"><em>Foundation HTML5 Animation with JavaScript</em></a>
    </header>
    <canvas id="canvas" width="400" height="400"></canvas>

    <script src="../include/utils.js"></script>
    <script src="./classes/ball.js"></script>
    <script>
    window.onload = function () {
      var canvas = document.getElementById(‘canvas‘),
          context = canvas.getContext(‘2d‘),
          ball = new Ball(),
          angle = 0,
          centerX = canvas.width / 2,
          centerY = canvas.height / 2,
          radiusX = 150,
          radiusY = 100,
          speed = 0.05;

      (function drawFrame () {
        window.requestAnimationFrame(drawFrame, canvas);
        context.clearRect(0, 0, canvas.width, canvas.height);

        ball.x = centerX + Math.cos(angle) * radiusX;
        ball.y = centerY + Math.sin(angle) * radiusY;
        angle += speed;
        ball.draw(context);
      }());
    };
    </script>
  </body>
</html>
时间: 2024-10-09 21:54:34

动画原理——绘制正弦函数&环绕运动&椭圆运动的相关文章

骨骼动画原理(转载)

视频教程请关注 http://edu.csdn.net/lecturer/lecturer_detail?lecturer_id=440 本例程展示如何建立骨骼动画,有些人叫蒙皮动画 定义如下: 当前有两种模型动画的方式:顶点动画和骨骼动画.顶点动画中,每帧动画其实 就是模型特定姿态的一个“快照”.通过在帧之间插值的方法,引擎可以得到平滑 的动画效果.在骨骼动画中,模型具有互相连接的“骨骼”组成的骨架结构,通过 改变骨骼的朝向和位置来为模型生成动画. 骨骼动画比顶点动画要求更高的处理器性能,但同

从Sprite3D理解3D骨骼动画原理

为了能够更好的使用cocos为我们提供的Sprite3D,我和大家分享一下Sprite3D中关于骨骼动画原理的部分,本文使用cocos2d-x 3.2版本,这是cocos首次出现3D骨骼动画的版本,相对与本文写出来时候最新的3.5版本,由于没有其他比如灯光等功能,3D骨骼动画模块读起来要更加的清晰.如果文章有纰漏或者错误的地方,也请大家指教. 目前引擎支持3种动画格式,分别是.obj,.c3b,.c3t,由于.obj没有骨骼,.c3b是二进制,而.c3t是json格式,所以本文就用官方test中

Unity3D 骨骼动画原理学习笔记

最近研究了一下游戏中模型的骨骼动画的原理,做一个学习笔记,便于大家共同学习探讨. ps:最近改bug改的要死要活,博客写的吭哧吭哧的~ 首先列出学习参考的前人的文章,本文较多的参考了其中的表述: 1.骨骼动画详解 :http://blog.csdn.net/ccx1234/article/details/6641944,不过这篇文章的原文已经被csdn封了:D,可以看看对应的转载的文章也行 2.OpenGL10-骨骼动画原理篇:http://www.cnblogs.com/zhanglitong

JS 实现无缝滚动动画原理(初学者入)

这段时间在教培训班的学生使用原生javascript实现无缝滚动的动画案例,做了这个原理演示的动画,分享给自学JS的朋友!博主希望对你们有帮助! 在讲解之前先看一下demo: demo:https://224137748.github.io/JS_warehouse/lunbo/domo.HTML源码:https://github.com/224137748/JS_warehouse/blob/master/lunbo/domo.HTML ps: 上面和下面的滚动进度是一致的,上面红色框是为了演

SVG描边动画原理

SVG描边动画原理其实很简单,主要利用以下两个属性 stroke-dasharray 制作虚线,使得黑白相间, stroke-dashoffset 使得虚线向开头偏移,这里的1500不精确,是我随便取的,下文介绍通过JS获取长度. 动画就是减少虚线偏移,那么实线就会慢慢漏出来了 JS获取长度 var path = document.querySelector('path'); var length = path.getTotalLength(); 然后改变path.style.strokeDas

动画原理

动画原理 动画的基本原理 : 让盒子的 offsetLeft   +  步长 原理 匀速运动封装函数 1 function animate(obj,target){ 2 var speed = obj.offsetLeft < target ? 5 : -5; // 用来判断 应该 + 还是 - 3 obj.timer = setInterval(function() { 4 var result = target - obj.offsetLeft; // 因为他们的差值不会超过5 5 obj.

android动画之从源码角度分析动画原理

以前一直不懂android的动画机制,android系统是如何实现动画的,所以导致只会做一些android系统已经为我们封装好的动画即:AlphaAnimation, TranslateAnimation, ScaleAnimation,RotateAnimation以及这些动画混合起来使用,其实有android系统为我们提供的这几种动画是可以满足我们平时的基本需求了,但是要做一些高级的动画就是不可能的,比如3D动画,所以就看了一下android系统所带动画的源码,做了一些总结,下面就是我对动画

动画原理——线性来回运动&amp;&amp;波动

书籍名称:HTML5-Animation-with-JavaScript 书籍源码:https://github.com/lamberta/html5-animation 1.在正选函数中,随角度的增大,sin的值徘徊在正一和负一之间.如下图.这可以用做物体的来回运动. 2.动画源码 index.html <!doctype html> <html> <head> <meta charset="utf-8"> <title>B

1.1.Project Butter,ui绘制原理,动画原理

原文地址:https://www.cnblogs.com/muouren/p/11704754.html