html5 canvas高级贝塞尔曲线运动动画(好吧这一篇被批的体无完肤!都说看不懂了!没办法加注释了!当然数学不好的我也没办法了,当然这还涉及到一门叫做计算机图形学的学科)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>canvas高级贝塞尔曲线运动动画</title>
<script src="js/modernizr.js "></script>
</head> <body>
<script type="text/javascript ">
window.addEventListener('load',eventWindowLoaded,false);
function eventWindowLoaded(){
canvasApp();
}
function canvasSupport(){
return Modernizr.canvas;
}
function canvasApp(){
if(!canvasSupport()){
return;
} var pointImage = new Image();
pointImage.src="point.png "; function drawScreen(){
//首先填充canvas的背景
context.fillStyle = '#eee'
context.fillRect(0,0,theCanvas.width,theCanvas.height);
//边框
context.strokeStyle = '#eee'
context.strokeRect(1,1,theCanvas.width,theCanvas.height); //在这里解释下贝塞尔曲线,看网页底部的那个点击成Canvas三次贝塞尔曲线操作实例!你就会发现一个曲线是由4个点组成的,在下面有注释 var t = ball.t; var cx = 3*(p1.x-p0.x);
var bx = 3*(p2.x-p1.x)-cx;
var ax = p3.x-p0.x-cx-bx; var cy = 3*(p1.y-p0.y);
var by = 3*(p2.y-p1.y)-cy;
var ay = p3.y-p0.y-cy-by; var xt = ax*(t*t*t)+bx*(t*t)+cx*t+p0.x;
var yt = ay*(t*t*t)+by*(t*t)+cy*t+p0.y;
//这里的xt和yt贝塞尔曲线的公式,这里涉及到一门叫做计算机图形学的学科(大学里面有上,我也最近一直在上)
// 0 <= t <= 1这是一个T....学过图形学的应该知道比如一根直线他的起始坐标轴的位置(0,0)然后有DDA算法计算斜率,他也是一样,具体的公式网上还是都有的,我的语言组织也不是很好-_-// ball.t +=ball.speed; if(ball.t>1){
ball.t=1;
} //绘制点
context.font = "10px sans ";
context.fillStyle = "#ff0000 ";
context.beginPath();
context.arc(p0.x,p0.y,8,0,Math.PI*2,true);
context.closePath();
context.fill();
context.fillStyle = "#fff";
context.fillText("0",p0.x-2,p0.y+2); //
points.push({x:xt,y:yt}); for(var i =0;i<points.length;i++){ context.drawImage(pointImage,points[i].x,points[i].y,1,1);
}
//绘制图片重点!!!!图片,定位context.drawImage(img,x,y,width,height);也就是绘制那个点后的小点的轨迹
context.closePath(); context.fillStyle="#000000 ";
context.beginPath();
context.arc(xt,yt,5,0,Math.PI*2,true);
context.closePath();
context.fill();
}
var p0={x:60,y:10};//起始点
var p1={x:70,y:200};//1号点
var p2={x:125,y:295};//2号点
var p3={x:350,y:350};//3号点
var ball={x:0,y:0,speed:.01,t:0};
var points=new Array(); //这里的起始点和3号点,我取得的名字比较通俗一下,实际上应该称为端点。因为必须要经过的
//1号点和2号点虽然可以删除但是他控制着弧线的路径,我们就叫他控制点 theCanvas = document.getElementById('canvas')
context = theCanvas.getContext("2d") setInterval(drawScreen,33); }
</script>
<canvas id="canvas" width="800 " height="800 ">
你的浏览器无法使用canvas
小白童鞋;你的支持是我最大的快乐!!
</canvas>
</body>
</html>"
http://files.cnblogs.com/files/LoveOrHate/canvas13.rar
好了大致也标注了一下重点之类的
有关贝塞尔的算法,我表示,我也是喜欢套公式的,让我自己研究公式你还是杀了我吧
刚刚有人问canvas是否能完成这样的效果,然后我就大致写了个大概!这个跨度跳的比较大的
实际上写博客只是为了让自己回顾下知识,毕竟当年刚开始学的时候有的地方也不是很理解!最后变成了瓶颈,困扰,所以重新回顾下的!这一篇写完,我又要继续枯燥的写基础了
因为我也没钱买空间放demo
所以大家把代码跑一下就行了-_-//
如果问我的工资都去哪里的话,我表示http://www.vogue.com.cn/ 上面的东西很贵的!偶要把钱存起来,以后交女朋友很贵的T_T
html5 canvas高级贝塞尔曲线运动动画(好吧这一篇被批的体无完肤!都说看不懂了!没办法加注释了!当然数学不好的我也没办法了,当然这还涉及到一门叫做计算机图形学的学科)的更多相关文章
- HTML5 Canvas核心技术:图形、动画与游戏开发 PDF扫描版
HTML5 Canvas核心技术:图形.动画与游戏开发 内容简介: <HTML5 Canvas核心技术:图形.动画与游戏开发>中,畅销书作家David Geary(基瑞)先生以实用的范例程 ...
- 一款基于HTML5 Canvas的画板涂鸦动画
今天给各网友分享一款基于HTML5 Canvas的画板涂鸦动画.记得之前我们分享过一款HTML5 Canvas画板工具,可以切换不同的笔刷,功能十分强大.本文今天要再来分享一款基于HTML5 Canv ...
- 【HTML】html5 canvas全屏烟花动画特效
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- HTML5 canvas绘制雪花飘落动画(需求分析、知识点、程序编写分布详解)
看到网上很多展示html5雪花飞动的效果,确实非常引人入胜,我相信大家也跟我一样看着心动的同时,也很好奇,想研究下代码如何实现:虽然哦很多地方也能下载这些源码,不过也不知道别人制作此类动画时的思路及难 ...
- 基于HTML5 Canvas粒子效果文字动画特效
之前我们分享过很多超酷的文字特效,其中也有利用HTML5和CSS3的.今天我们要来分享一款基于HTML5 Canvas的文字特效,输入框中输入想要展示的文字,回车后即可在canvas上绘制出粒子效果的 ...
- 超酷!!HTML5 Canvas 水流样式 Loading 动画
今天我们要分享另外一款基于HTML5 Canvas的液体流动样式Loading加载动画,这款Loading动画在加载时会呈现液体流动的动画效果,并且由于和背景颜色的对比,也略微呈现发光的动画效果. 效 ...
- HTML5 Canvas核心技术—图形、动画与游戏开发.pdf7
性能 运行putImageData()比drawImage()慢,同等条件下优先考虑drawImage() 操作图像数据需要遍历大量数据,应该注意几点: 1)避免在循环体中直接访问对象属性,应当保存在 ...
- HTML5 Canvas核心技术—图形、动画与游戏开发.pdf2
事件处理: HTML5应用程序是以事件来驱动的,可以在canvas中增加一个事件监听器,当事件发生时,浏览器就会调用这个监听器 //方法一canvas.onmousedown=function(e){ ...
- HTML5 Canvas核心技术—图形、动画与游戏开发.pdf1
canvas元素可以说是HTML5元素中功能最强大的一个,它真正的能力是通过Canvas的context对象(绘图上下文)表现出来的 fillText()方法使用fillStyle属性来填充文本中的字 ...
随机推荐
- fiddler之会话数据的修改
fiddler之会话数据的修改 fiddler记录http的请求,并且针对特定的http请求,可以分析请求数据.修改数据.调试web系统等,功能十分强大.本篇主要讲两种修改的数据的方法,断点和Unlo ...
- linux重启tomcat的shell脚本
基本思路: 先检查待重启的tomcat的进程是否存在 存在则执行shutdown. 然后再次检查进程是否还存在,不存在则执行kill 然后删除工作空间及10天前的日志. 最后执行启动. #!/bin/ ...
- Unity 2D相机公式换算(从其他博客上抄的)
2d camera, unit坐标,单位换算 2d游戏可以使用平行投影的camera,这种camera需要设置size (orthographicSize),size的含义为屏幕高度的一半,不过单位不 ...
- Beta阶段事后分析
1. 设想和目标 1.1 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们在Beta阶段任务主要分为两部分,一类是对原功能的扩展,一类是新的博文功能.我们通过规 ...
- C++ 派生类构造函数和析构函数
几个问题 一个类的各数据成员的构造顺序? 按他们在类定义中出现的先后顺序:先定义者先构造. 类的对象成员的构造函数与类自身的构造函数的执行顺序? 先执行对象成员的构造函数,再执行类自身的构造函数. 构 ...
- ajax请求超时判断(转载)
ajax请求时有个参数可以借鉴一下 var ajaxTimeOut = $.ajax({ url:'', //请求的URL timeout : 1000, //超时时间设置,单位毫秒 type : ' ...
- Python 安装 imread报错
看到一篇博客才解决 http://blog.csdn.net/u010480899/article/details/52701025
- 第一个spring,总结!
陈志棚:界面跳转与框架 李天麟:游戏界面ui 徐侃:算法代码的设计 经过五天的时间,开会时候分配的任务,已经全部完成,在这期间中,我们遇到了一些问题.但是,经过android老师的指导后,app成功的 ...
- Win 2008 r2 远程桌面多用户登陆,一用户多登陆配置
Windows 2008 R2远程桌面,设置最大连接数,一个登录后另一个就被踢掉等问题 Windows 2008 R2配置如图: 1.打开远程桌面回话主机配置 2.右键RDP-Tcp,属性,可设置最大 ...
- vue-resource和axios区别
vue-resource Vue.js是数据驱动的,这使得我们并不需要直接操作DOM,如果我们不需要使用jQuery的DOM选择器,就没有必要引入jQuery.vue-resource是Vue.js的 ...