来源:未知 时间:2021-05-04 20:19 作者:小飞侠 阅读:次
[导读] 之前讲过canvas绘制标准圆形动画,今天带来canvas绘制椭圆动画。 预览图: 效果预览: 绘制椭圆动画稍微麻烦点,涉及到数据公式。 长轴长我们用2a表示,短轴长我们用2b表示 假设椭圆...
之前讲过canvas绘制标准圆形动画,今天带来canvas绘制椭圆动画。 预览图: 效果预览:https://www.zixuephp.com/static/res/canvas/test/canvas-tround2.html 绘制椭圆动画稍微麻烦点,涉及到数据公式。 长轴长我们用2a表示,短轴长我们用2b表示 假设椭圆的长轴与X轴平行,那么表达式如下所示: 是不是看得很懵逼,如果是那是你数学没学好... 不过没关系,我们只需要记住JS最终推导公式:假设求P点坐标,那么JS代码如下:t可以理解为单位时间角度,这个可以根据自己需求和360°换算即可。 x=a*cos(t) y=b*sin(t) 带入公式看代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>canvas实现椭圆运动</title> </head> <body> <canvas id="canvas">你的浏览器不支持canvas,请跟换其他浏览器试一试</canvas> <script> var a=200, b=150, radius=30; time=0;//循环的次数 window.onload=function(){ var canvas=document.getElementById('canvas'); canvas.height=768; canvas.width=1024; var cxt=canvas.getContext('2d'); centerPoint(cxt); arcRoute(cxt,500,300,a,b,radius); setInterval(function(){ arcRoute(cxt,500,300,a,b,radius); },1000 / 60); }; //绘制原点 function centerPoint(cxt){ cxt.fillStyle="red"; cxt.beginPath(); cxt.arc(400,400,50,0,2*Math.PI,true) cxt.closePath(); cxt.fill(); } //椭圆路线绘制 function route(context,x,y,a,b){ var step = (a > b) ? 1 / a : 1 / b; context.beginPath(); context.moveTo(x + a, y); //从椭圆的左端点开始绘制 for (var i = 0; i < 2 * Math.PI; i += step) { context.lineTo(x + a * Math.cos(i), y + b * Math.sin(i)); } context.closePath(); context.stroke(); } //椭圆上小球运动的实现 function arcRoute(context,x,y,a,b,r){ context.clearRect(0,0,1024,768); route(context,x,y,a,b); // centerPoint(context); var step = (a > b) ? 1 / a : 1 / b; context.fillStyle="red"; if(time==0){ context.beginPath(); context.arc(x,y,r,0,2*Math.PI,true); context.closePath(); context.fill(); }else{ context.beginPath(); context.arc(x+a*Math.cos(time),y+b*Math.sin(time),r,0,2*Math.PI,true); context.closePath(); context.fill(); } time+=0.01; } </script> </body> </html> |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com