Bezier 曲线参数方程

摘要:
Bezier参数方程{randomRange:function(min,max){returnmin+Math.random()*(max-min);},quadraticBezier:函数(p0,p1,p2,t,pFinal){pFinal=pFinal||{};pFinal.x=数学功率(1-t,2)*p0.x+(1-t)*2*t*p1.x+t*t*p2.x;p最终。

Bezier参数方程

Bezier 曲线参数方程第1张

{

randomRange: function (min, max) {
 return min + Math.random() * (max - min);
},

quadraticBezier: function (p0, p1, p2, t, pFinal) {
                pFinal = pFinal || {};
                pFinal.x = Math.pow(1 - t, 2) * p0.x +
                    (1 - t) * 2 * t * p1.x +
                    t * t * p2.x;
                pFinal.y = Math.pow(1 - t, 2) * p0.y +
                    (1 - t) * 2 * t * p1.y +
                    t * t * p2.y;
return pFinal;
},

cubicBezier: function (p0, p1, p2, p3, t, pFinal) {
                pFinal = pFinal || {};
                pFinal.x = Math.pow(1 - t, 3) * p0.x +
                    Math.pow(1 - t, 2) * 3 * t * p1.x +
                    (1 - t) * 3 * t * t * p2.x +
                    t * t * t * p3.x;
                pFinal.y = Math.pow(1 - t, 3) * p0.y +
                    Math.pow(1 - t, 2) * 3 * t * p1.y +
                    (1 - t) * 3 * t * t * p2.y +
                    t * t * t * p3.y;
 return pFinal;
}
}
      window.onload = function () {
            let canvas = document.getElementById("canvas"),
                context = canvas.getContext("2d"),
                width = canvas.width = window.innerWidth,
                height = canvas.height = window.innerHeight,

                p0 = {
                    x: utils.randomRange(0, width),
                    y: utils.randomRange(0, height)
                }
            p1 = {
                x: utils.randomRange(0, width),
                y: utils.randomRange(0, height)
            }
            p2 = {
                x: utils.randomRange(0, width),
                y: utils.randomRange(0, height)
            }
            p3 = {
                x: utils.randomRange(0, width),
                y: utils.randomRange(0, height)
            }

            context.beginPath()
            context.arc(p0.x, p0.y, 4, 0, Math.PI * 2, false)
            context.fill()

            context.beginPath()
            context.arc(p1.x, p1.y, 4, 0, Math.PI * 2, false)
            context.fill()

            context.beginPath()
            context.arc(p2.x, p2.y, 4, 0, Math.PI * 2, false)
            context.fill()

            context.beginPath()
            context.arc(p3.x, p3.y, 4, 0, Math.PI * 2, false)
            context.fill()

            // context.beginPath()
            // context.moveTo(p0.x,p0.y)
            // context.bezierCurveTo(p1.x,p1.x,p2.x,p2.y,p3.x,p3.y)
            // context.stroke()

            let pFinal = {}

            for(let t = 0; t <= 1; t+=0.01){
                utils.cubicBezier(p0,p1,p2,p3,t,pFinal);
                context.beginPath();
                context.arc(pFinal.x, pFinal.y, 10, 0, Math.PI * 2, false)
                context.stroke()
            }
        }

免责声明:文章转载自《Bezier 曲线参数方程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何在win7下通过easyBCD引导安装Ubuntu14.04delphi XE 學習筆記二:TThread.CreateAnonymousThread下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

asterisk 基本配置

Asterisk译为星号(*)在很多应用中被用做通配符,Astrisk做为PBX系统的完美名称,原因之一是Asterisk可以连接数目庞大的接口类型,包括:  1模拟接接口,如你的电话线或模拟电话.   2数字线路,如T-1和E-1线路   3Voip协议,如SIP和IAX   目前正式版本是IAX2,但是IAX1的所有格式都已经停掉.所以当说到IAX都是...

线程池如何传递ThreadLocal

前言 在做分布式链路追踪系统的时候,需要解决异步调用透传上下文的需求,特别是传递traceId,本文就线程池透传几种方式进行分析。 其他典型场景例子: 分布式跟踪系统 或 全链路压测(即链路打标) 日志收集记录系统上下文 Session级Cache 应用容器或上层框架跨应用代码给下层SDK传递信息 1、JDK对跨线程传递ThreadLocal的支持...

JavaScript内置一些方法的实现原理--new关键字,call/apply/bind方法--实现

先学习下new操作符吧 new关键字调用函数的心路历程: 1.创建一个新对象 2.将函数的作用域赋给新对象(this就指向这个对象) 3.执行函数中的代码 4.返回这个对象 根据这个的思路,来实现一个简单的new操作吧,代码演示: 1 function myNew(Func, ...args) { 2 if (typeof Func !== 'fu...

Asp.net 使用weboffice实现Word在线编辑

项目中客户需要在页面中实现Word的在线编辑,Word写保护等功能。之前写了篇文章,用的是dsoframer.ocx,参考的都是网络上的资源。用的时候页面卡, 而且word2003和word2007有问题。现在找了个另外一个组件,点聚公司的weboffice,还不错。主要是免费的。 关于weboffice的使用,大家可以看看官网,他那有演示。我这也把我找的...

利用html5调用本地摄像头拍照上传图片

   html5概念啥的就不废话了,不知道的 百度, 谷歌一堆。。今天学了学html5中的Canvas结合新增的<video>标签来获取本地摄像头,在html5之前,要在浏览器获取本地摄像头只有通过插件(ActiveX,但是这种只有IE支持)或者是flash来获取(或许你没学过flash那就很坑爹了),在之后微软的silvertlight中也...

内存泄漏解析

永远的Singleton 单例的使用在我们的程序中随处可见,因为使用它可以完美的解决我们在程序中重复创建对象的问题,不过可别小瞧它。由于单例的静态特性,使得它的生命周期和应用的生命周期会一样长,所以一旦使用有误,小心无限制的持有Activity的引用而导致内存泄漏。比如,下面的例子。 public class SingletonBad { pri...