canvas中的曲线运动

一 :曲线运动

   实现曲线运动的方法目前了解到两种:一种是三角函数,另一种是贝塞尔曲线,在这里我就介绍下如何用三角函数实现曲线运动。

三角函数相信大家在高中都有接触过,比如 正弦、余弦、正切等。这里我就简单介绍下正弦函数的运动轨迹。

 正弦函数图像
QQ截图20160826192452.jpg

如图所示的正弦函数就是一种曲线运动,那么如何能让一个物体能实现这种运动呢?

一:从图中可看出X轴代表的是弧度,Y轴代表的sin(弧度);

   那么弧度与角度是如何换算的?
      2π=360°;
     1°=2π/360°=π/180°;
     1弧度=180°/π;

二: 创建一个Div做为做曲线运动的对象

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title></title>
  <style>
    #div{width:10px;height:10px;background: red;position: absolute;top:500px;left:200px;}
.box{position: absolute;border: 1px solid #000;}
  </style>
<body>
  <div id="div"></div>
</body>
</html>

三:用js去控制这个Div的left值和top值

 <script>
      window.onload=function(){


     var oDiv=document.getElementById('div');
     var startX=oDiv.offsetLeft;
     var startY=oDiv.offsetTop;
     var num=0;
     var count=100;
     setInterval(function(){

         num++
        //count用来放大运动的轨迹
        //num*Math.PI/180 代表弧度
         oDiv.style.left=startX+0.5*(num*Math.PI/180)*count+'px';
         oDiv.style.top=startY-2*Math.sin(num*Math.PI/180)*count+'px';
         var oDiv1=document.createElement('div');
         oDiv1.className='box';
         oDiv1.style.left=oDiv.offsetLeft+'px';
         oDiv1.style.top=oDiv.offsetTop+'px';
         document.body.appendChild(oDiv1);

     },10);

      }
  </script>

曲线运动效果示意图

move.gif

四:如何让多物体做曲线运动

```

<script type="text/javascript">
window.onload=function(){

     var oC=document.getElementById('c');
     var oGC=oC.getContext('2d');


     var setArr=[];  //存储圆心坐标  半径  颜色等数据,以json的形式存储数据  

     setInterval(function(){

       oGC.clearRect(0,0,oC.width,oC.height);

       for(var i=0;i<setArr.length;i++){
         //通过改变圆心的坐标来实现曲线运动
          setArr[i].num++;
          setArr[i].X=setArr[i].startX -2*Math.sin(setArr[i].num*Math.PI/180)*setArr[i].step;
          setArr[i].Y=setArr[i].startY- 3*(setArr[i].num*Math.PI/180)*setArr[i].step;
          if(setArr[i].Y<100){
          setArr.splice(i,1);
  }
}

       for( var i=0;i<setArr.length;i++){
         oGC.fillStyle = 'rgba('+setArr[i].c1+','+setArr[i].c2+','+setArr[i].c3+','+setArr[i].c4+')';
         oGC.beginPath();
         oGC.moveTo(setArr[i].X,setArr[i].Y);
          oGC.arc(setArr[i].X,setArr[i].Y,setArr[i].R,0,360*Math.PI/180);
         oGC.closePath();
         oGC.fill();

       }


     },1000/60);


     setInterval(function(){

       var x=Math.random()*oC.width;
       var y=oC.height-10;
       var r=Math.random()*6+2;
       var c1 = Math.round(Math.random()*255);
       var c2 = Math.round(Math.random()*255);
       var c3 = Math.round(Math.random()*255);
       var c4 = 1;
       var step=Math.random()*20+10;
       var num=0;
       var startX=x;
       var startY=y;

      setArr.push({
     
         X:x,
         Y:y,
         R:r,
         c1:c1,
         c2:c2,
         c3:c3,
         c4:c4,
         num:num,
         step:step,
         startX:x,
         startY:y


      });

     },100);




  }

</script>
```

效果示意图

canvas.gif
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容

  • 上次给大家分享了《2017年最全的excel函数大全8—文本函数(下)》,这次分享给大家数学和三角函数(上)。 A...
    幸福的耗子阅读 1,501评论 0 1
  • 一、傅立叶变换的由来 关于傅立叶变换,无论是书本还是在网上可以很容易找到关于傅立叶变换的描述,但是大都是些故弄玄虚...
    constant007阅读 4,418评论 1 10
  • 18日小鹿来北京~ 中午吃了部队锅,做指甲,下午去隐泉日料~(点的清汤蔬菜锅,青花鱼,寿司) 19日 上午燕麦香蕉...
    mariella阅读 163评论 0 1
  • 1、栅格化; 说明:栅格化是将cell中的所有内容生成一张独立的图像注意:必须指定分辨率,否则默认使用 *1 生成...
    冀F旭阅读 262评论 0 0
  • 字是打门锤。一笔好字,一门艺术,一生修养。 乐学堂书法班老师由贵州省书法家协会会员,贵阳市艺术研究院特聘书法家,贵...
    2dbd67f8c77a阅读 977评论 0 0