JavaScript实现的贝塞尔曲线算法简单示例


Posted in Javascript onJanuary 30, 2018

本文实例讲述了JavaScript实现的贝塞尔曲线算法。分享给大家供大家参考,具体如下:

如果在HTML5支持好的浏览器中,可以看到用svg绘制的路径线。

在所有浏览器中,均可以看到一个小方块沿着贝塞尔曲线路径来回运动。

效果图:

JavaScript实现的贝塞尔曲线算法简单示例

主要代码:

<div style="position:absolute;left:0;top:0;width:500px;height:300px;overflow:hidden;">
<svg id="root" width="500" height="300" viewBox="0 0 500 300" xmlns="http://www.w3.org/2000/svg">
<title>svg</title>
<path d="M20,100 c80 -200 280 200 380 0 h-400" fill="none" stroke-width="1" stroke="gray" stroke-dasharray="3,3" />
</svg>
</div>
<div id="dotMove" style="position:absolute;width:6px;height:6px;overflow:hidden;background-color:#FF0000;"></div>
<script type="text/javascript">
/*
参考维基百科
http://zh.wikipedia.org/wiki/%E8%B2%9D%E8%8C%B2%E6%9B%B2%E7%B7%9A
*/
function Point2D(x,y){
  this.x=x||0.0;
  this.y=y||0.0;
}
/*
 cp在此是四??元素的?列:
 cp[0]?槠鹗键c,或上?D中的P0
 cp[1]?榈谝??控制?,或上?D中的P1
 cp[2]?榈诙??控制?,或上?D中的P2
 cp[3]?榻Y束?,或上?D中的P3
 t???抵担? <= t <= 1
*/
function PointOnCubicBezier( cp, t )
{
  var  ax, bx, cx;
  var  ay, by, cy;
  var  tSquared, tCubed;
  var  result = new Point2D ;
  /*?算多?式?S??/
  cx = 3.0 * (cp[1].x - cp[0].x);
  bx = 3.0 * (cp[2].x - cp[1].x) - cx;
  ax = cp[3].x - cp[0].x - cx - bx;
  cy = 3.0 * (cp[1].y - cp[0].y);
  by = 3.0 * (cp[2].y - cp[1].y) - cy;
  ay = cp[3].y - cp[0].y - cy - by;
  /*?算位於??抵?的曲??*/
  tSquared = t * t;
  tCubed = tSquared * t;
  result.x = (ax * tCubed) + (bx * tSquared) + (cx * t) + cp[0].x;
  result.y = (ay * tCubed) + (by * tSquared) + (cy * t) + cp[0].y;
  return result;
}
/*
 ComputeBezier以控制?cp所?生的曲??,填入Point2D???的?列。
 呼叫者必?分配足?虻挠????以供?出?果,其??lt;sizeof(Point2D) numberOfPoints>
*/
function ComputeBezier( cp, numberOfPoints, curve )
{
  var  dt;
  var  i;
  dt = 1.0 / ( numberOfPoints - 1 );
  for( i = 0; i < numberOfPoints; i++)
    curve[i] = PointOnCubicBezier( cp, i*dt );
}
var cp=[
  new Point2D(20, 0), new Point2D(100, 200), new Point2D(300, -200), new Point2D(400, 0)
];
var numberOfPoints=100;
var curve=[];
ComputeBezier( cp, numberOfPoints, curve );
var i=0, dot=document.getElementById("dotMove");
setInterval(function (){
  var j = (i<100)?i:(199-i);
  dot.style.left=curve[j].x+'px';
  dot.style.top=100-curve[j].y+'px';
  if(++i==200)i=0;
}, 50);
</script>

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
jquery利用event.which方法获取键盘输入值的代码
Oct 09 Javascript
Express.JS使用详解
Jul 17 Javascript
jQuery替换textarea中换行的方法
Jun 10 Javascript
详细分析使用AngularJS编程中提交表单的方式
Jun 19 Javascript
使用coffeescript编写node.js项目的方法汇总
Aug 05 Javascript
jQuery模拟原生态App上拉刷新下拉加载更多页面及原理
Aug 10 Javascript
js 获取当前web应用的上下文路径实现方法
Aug 19 Javascript
form+iframe解决跨域上传文件的方法
Nov 18 Javascript
获取jqGrid中选择的行的数据
Nov 30 Javascript
js的函数的按值传递参数(实例讲解)
Nov 16 Javascript
VUE 3D轮播图封装实现方法
Jul 03 Javascript
对layui初始化列表的CheckBox属性详解
Sep 13 Javascript
详解刷新页面vuex数据不消失和不跳转页面的解决
Jan 30 #Javascript
AngularJS双向数据绑定原理之$watch、$apply和$digest的应用
Jan 30 #Javascript
微信小程序数据存储与取值详解
Jan 30 #Javascript
Vue精简版风格概述
Jan 30 #Javascript
vue自定义全局组件(自定义插件)的用法
Jan 30 #Javascript
vue2.0之多页面的开发的示例
Jan 30 #Javascript
vue-cli实现多页面多路由的示例代码
Jan 30 #Javascript
You might like
PHP对MongoDB[NoSQL]数据库的操作
2013/03/01 PHP
PHP与Java进行通信的实现方法
2013/10/21 PHP
PHP递归遍历文件夹去除注释并压缩php源代码的方法示例
2018/05/23 PHP
使用laravel根据用户类型来显示或隐藏字段
2019/10/17 PHP
Firefox outerHTML实现代码
2009/06/04 Javascript
js不能跳转到上一页面的问题解决方法
2013/03/01 Javascript
获取select元素被选中的文本内容的js代码
2014/01/29 Javascript
javascript匿名函数应用示例介绍
2014/03/07 Javascript
详解JavaScript ES6中的模板字符串
2015/07/28 Javascript
Bootstrap入门书籍之(零)Bootstrap简介
2016/02/17 Javascript
js+html5实现canvas绘制椭圆形图案的方法
2016/05/21 Javascript
javascript 判断是否是微信浏览器的方法
2016/10/09 Javascript
JS实现简易的图片拖拽排序实例代码
2017/06/09 Javascript
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
2018/09/21 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
2018/10/19 Javascript
js纯前端实现腾讯cos文件上传功能的示例代码
2019/05/14 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
JavaScript中的惰性载入函数及优势
2020/02/18 Javascript
[02:39]DOTA2英雄基础教程 极限穿梭编织者
2013/12/05 DOTA
Python3实现爬取指定百度贴吧页面并保存页面数据生成本地文档的方法
2018/04/22 Python
Python批量安装卸载1000个apk的方法
2020/04/10 Python
非常震撼的纯CSS3人物行走动画
2016/02/24 HTML / CSS
Html5中localStorage存储JSON数据并读取JSON数据的实现方法
2017/02/13 HTML / CSS
Html5 webview元素定位工具的实现
2020/08/07 HTML / CSS
英国时尚优质的女装:Hope Fashion
2018/08/14 全球购物
计算机专业自荐信
2013/10/14 职场文书
运动会闭幕式解说词
2014/02/21 职场文书
房地产开发项目建议书
2014/05/16 职场文书
我是一名护士演讲稿
2014/08/28 职场文书
社区党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
导游词300字
2015/02/13 职场文书
2015年国税春训心得体会
2015/03/09 职场文书
开展警示教育活动总结
2015/05/09 职场文书
java泛型通配符详解
2021/07/25 Java/Android
mysql中varchar类型的日期进行比较、排序等操作的实现
2021/11/17 MySQL