校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > canvas實現高階貝塞爾曲線(N階貝塞爾曲線生成器)

canvas實現高階貝塞爾曲線(N階貝塞爾曲線生成器)

熱門標簽:四川點撥外呼系統 南寧點撥外呼系統哪家公司做的好 電銷機器人電話用什么卡 江蘇智能電銷機器人哪家好 黃島區地圖標注 云南大理400電話申請官方 成都智能外呼系統平臺 鎮江智能外呼系統有效果嗎 當涂高德地圖標注

寫在最前

由于原生的Canvas最高只支持到三階貝塞爾曲線,那么我想添加多個控制點怎么辦呢?(即便大部分復雜曲線都可以用3階貝塞爾來模擬)與此同時,關于貝塞爾控制點的位置我們很難非常直觀的清楚到底將控制點設置為多少可以形成我們想要的曲線。本著解決以上兩個痛點同時社區內好像并沒有N階的解決方案(js版)故這次作者非常認真的開源了bezierMaker.js!

bezierMaker.js理論上支持N階貝塞爾曲線的生成,同時提供了試驗場供開發者可以自行添加并拖拽控制點最終生成一組繪制動畫。非常直觀的讓開發者知道不同位置的控制點所對應的不同生成曲線。

如果你喜歡這個作品歡迎Star,畢竟star來之不易。。

項目地址:這里✨✨✨

為什么需要一個試驗場?

在繪制復雜的高階貝塞爾曲線時無法知道自己需要的曲線的控制點的精確位置。在試驗場中進行模擬,可以實時得到控制點的坐標值,將得到的點坐標變為對象數組傳遞進BezierMaker類就可以生成目標曲線

效果圖

 
 

功能

  1. [x] 試驗場可添加任意數量控制點
  2. [x] 試驗場支持展示曲線繪制的形成動畫
  3. [x] 控制點可自由拖拽
  4. [x] 支持顯示貝塞爾曲線形成過程的切線
  5. [x] 3階及以下貝塞爾曲線的繪制采用原生API

引入

<script src="./bezierMaker.js"></script>

繪制

上面的效果圖為試驗場的使用,當你通過試驗場獲得控制點的準確坐標之后,就可以調用bezierMaker.js進行曲線的直接繪制。

/**
 * canvas canvas的dom對象
 * bezierCtrlNodesArr 控制點數組,包含x,y坐標
 * color 曲線顏色
 */
var canvas = document.getElementById('canvas')
//3階之前采用原生方法實現
var arr0 = [{x:70,y:25},{x:24,y:51}]
var arr1 = [{x:233,y:225},{x:170,y:279},{x:240,y:51}]
var arr2 = [{x:23,y:225},{x:70,y:79},{x:40,y:51},{x:300, y:44}]
var arr3 = [{x:333,y:15},{x:70,y:79},{x:40,y:551},{x:170,y:279},{x:17,y:239}]
var arr4 = [{x:53,y:85},{x:170,y:279},{x:240,y:551},{x:70,y:79},{x:40,y:551},{x:170,y:279}]
var bezier0 = new BezierMaker(canvas, arr0, 'black')
var bezier1 = new BezierMaker(canvas, arr1, 'red')
var bezier2 = new BezierMaker(canvas, arr2, 'blue')
var bezier3 = new BezierMaker(canvas, arr3, 'yellow')
var bezier4 = new BezierMaker(canvas, arr4, 'green')
bezier0.drawBezier()
bezier1.drawBezier()
bezier2.drawBezier()
bezier3.drawBezier()
bezier4.drawBezier()

繪制結果

當控制點少于3個時,會適配使用原生的API接口。當控制點多于2個后,由我們自己實現的函數進行描點繪制。

核心原理

繪制貝塞爾曲線

繪制貝塞爾曲線的核心點在于貝塞爾公式的運用:
 

 
 

這個公式中的P0-Pn代表了從起點到各個控制點再到終點的各點與占比t的各種冪運算。

BezierMaker.prototype.bezier = function(t) { //貝塞爾公式調用
    var x = 0,
        y = 0,
        bezierCtrlNodesArr = this.bezierCtrlNodesArr,
        //控制點數組
        n = bezierCtrlNodesArr.length - 1,
        self = this
    bezierCtrlNodesArr.forEach(function(item, index) {
        if(!index) {
            x += item.x * Math.pow(( 1 - t ), n - index) * Math.pow(t, index) 
            y += item.y * Math.pow(( 1 - t ), n - index) * Math.pow(t, index) 
        } else {
        //factorial為階乘函數
            x += self.factorial(n) / self.factorial(index) / self.factorial(n - index) * item.x * Math.pow(( 1 - t ), n - index) * Math.pow(t, index) 
            y += self.factorial(n) / self.factorial(index) / self.factorial(n - index) * item.y * Math.pow(( 1 - t ), n - index) * Math.pow(t, index) 
        }
    })
    return {
        x: x,
        y: y
    }
}

對所有點進行遍歷同時根據當前占比t的值(0<=t<=1),計算出當前在貝塞爾曲線上的點坐標x,y。t的取值作者分成了1000份,即每次運算t+=0.01。此時算出的x,y即所求的貝塞爾曲線分成了1000份之后的某一點。當t值從0~1遍歷1000次后生成1000個x,y對應坐標,依次描點畫線即可模擬出高階貝塞爾曲線。

對于貝塞爾公式的推導作者會在之后的文章中專門說明,現在你只需要知道我們通過貝塞爾公式計算出實際貝塞爾曲線被等分成了1000份的各點,用直線連接各點后即可模擬出類曲線。

對于模擬場貝塞爾曲線生成動畫的實現

這個部分相關代碼可以參考這里

整體思路是用遞歸的方式來將每個一層控制點當做1階貝塞爾函數來計算下一層控制點并對應連線。具體邏輯作者會留到深入講解貝塞爾曲線公式原理的時候一起梳理一下試驗場的動畫生成原理~

小結

作者一直想開源一些東西(但是菜,也沒啥能寫的),然而平時會用到的都被人寫了,再造輪子也沒別人寫得好。這次也算是發現了一個貌似空白一些的區域。所以非常鄭重的決定開源。貝塞爾的高級運用在gayhub中大多是安卓的實現,前端領域中還有很多地方可以更多的展開,歡迎討論~ 多多批評!

最后

項目地址:這里✨✨

試驗場地址:一定進來玩✨✨✨

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:南京 淮安 西寧 廣西 十堰 佳木斯 咸寧 酒泉

巨人網絡通訊聲明:本文標題《canvas實現高階貝塞爾曲線(N階貝塞爾曲線生成器)》,本文關鍵詞  canvas,實現,高階,貝,塞爾,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《canvas實現高階貝塞爾曲線(N階貝塞爾曲線生成器)》相關的同類信息!
  • 本頁收集關于canvas實現高階貝塞爾曲線(N階貝塞爾曲線生成器)的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    色一情一伦一子一伦一区| 国产精品亚洲专一区二区三区| 不卡一区二区三区四区| 国产精品欧美久久久久一区二区| 国产成人精品aa毛片| 亚洲欧美日韩国产手机在线 | 久久亚洲免费视频| 国产乱人伦精品一区二区在线观看| 久久综合成人精品亚洲另类欧美 | 亚洲成人激情av| 制服丝袜成人动漫| 久久精品国产免费看久久精品| 亚洲精品一区二区三区蜜桃下载 | 亚洲免费av在线| 91精品一区二区三区在线观看| 久久99在线观看| 国产精品国产三级国产三级人妇| 在线观看国产精品网站| 九九国产精品视频| 国产精品入口麻豆九色| 欧美日韩一区视频| 国产一区二区视频在线播放| 亚洲人被黑人高潮完整版| 欧美日韩国产综合久久| 国产麻豆精品久久一二三| 亚洲免费视频成人| 久久亚洲综合色| 在线观看欧美精品| 国产精品中文字幕日韩精品| 一级日本不卡的影视| 久久女同精品一区二区| 欧美性受xxxx黑人xyx性爽| 人人狠狠综合久久亚洲| 最新欧美精品一区二区三区| 91精品一区二区三区久久久久久 | 久久久久久影视| 在线欧美日韩国产| 国产主播一区二区三区| 亚洲主播在线播放| 国产无人区一区二区三区| 在线电影欧美成精品| 成人免费视频视频在线观看免费 | 国产成都精品91一区二区三| 丝袜亚洲另类欧美综合| 亚洲天天做日日做天天谢日日欢| 日韩免费福利电影在线观看| 欧美三电影在线| 北条麻妃一区二区三区| 国产毛片精品视频| 蜜桃精品在线观看| 亚洲成人免费视频| 亚洲女爱视频在线| 国产精品女上位| 精品国产1区2区3区| 欧美日韩在线播放一区| 91猫先生在线| 99re这里都是精品| 成人午夜又粗又硬又大| 国产乱一区二区| 久久99久久久欧美国产| 免费在线观看视频一区| 亚洲3atv精品一区二区三区| 亚洲精品一卡二卡| 成人免费在线播放视频| 中文字幕色av一区二区三区| 国产精品美女久久久久aⅴ | 精品影视av免费| 天天免费综合色| 亚洲成人av福利| 亚洲网友自拍偷拍| 一区二区成人在线| 一区二区三区.www| 伊人一区二区三区| 亚洲国产一二三| 亚洲高清不卡在线观看| 亚洲一本大道在线| 午夜精品成人在线视频| 日韩av一区二区在线影视| 日韩精品一二三四| 日本午夜一本久久久综合| 日本不卡一二三| 久久精品国产秦先生| 国产一区二区精品久久99| 韩国毛片一区二区三区| 国产精品888| 白白色 亚洲乱淫| 在线精品视频一区二区三四 | 青青草原综合久久大伊人精品| 三级影片在线观看欧美日韩一区二区| 亚洲成人在线观看视频| 蜜臀av国产精品久久久久| 国产专区欧美精品| 99免费精品视频| 日本韩国欧美在线| 欧美精品三级在线观看| 欧美videofree性高清杂交| 久久久影院官网| 自拍偷在线精品自拍偷无码专区 | 亚洲欧洲日韩在线| 一区二区三区产品免费精品久久75| 亚洲成av人片在线观看| 久久精品理论片| 成人免费毛片a| 欧美日韩综合色| 欧美成人福利视频| 中文字幕中文乱码欧美一区二区 | 色综合网站在线| 91.com在线观看| 国产欧美日韩不卡| 亚洲伊人色欲综合网| 久久99最新地址| 97久久人人超碰| 欧美一级片免费看| 国产精品久久国产精麻豆99网站| 香蕉久久夜色精品国产使用方法| 精品在线观看免费| 色偷偷成人一区二区三区91| 日韩欧美国产高清| 亚洲欧美日韩在线不卡| 久久99精品网久久| 91久久香蕉国产日韩欧美9色| 日韩欧美在线影院| 18涩涩午夜精品.www| 久久91精品久久久久久秒播| 色婷婷综合五月| 国产午夜精品福利| 日韩av中文在线观看| 99久久99久久精品免费看蜜桃| 日韩一区二区三区免费看| 亚洲欧美日韩在线| 国产白丝精品91爽爽久久| 欧美日韩一级黄| 中文在线一区二区| 麻豆精品久久久| 91福利国产精品| 中文字幕免费在线观看视频一区| 日韩电影一区二区三区| 色婷婷久久久久swag精品| 久久久久久免费网| 蜜桃视频免费观看一区| 欧美日韩在线三区| 亚洲欧美日韩在线播放| 国产99久久久国产精品潘金 | 亚洲成人激情综合网| 97se亚洲国产综合自在线| 久久色成人在线| 欧美aa在线视频| 欧美日韩日日夜夜| 一个色综合网站| 91免费国产在线| 亚洲日本在线观看| 成人免费毛片片v| 亚洲国产精品传媒在线观看| 久久福利视频一区二区| 在线观看91精品国产麻豆| 亚洲成a人片在线不卡一二三区| 色老综合老女人久久久| 国产精品对白交换视频| a4yy欧美一区二区三区| 国产精品欧美一区喷水| 成人理论电影网| 国产精品国产三级国产aⅴ无密码| 大陆成人av片| 中文字幕欧美区| 99精品视频在线免费观看| 国产精品情趣视频| 99精品视频在线播放观看| 亚洲女与黑人做爰| 91麻豆国产香蕉久久精品| 亚洲精品久久久久久国产精华液| 97久久精品人人做人人爽| 亚洲欧美另类久久久精品| 一本色道久久综合狠狠躁的推荐 | 色综合天天性综合| 亚洲卡通欧美制服中文| 欧美三级一区二区| 蜜臀久久99精品久久久画质超高清 | 在线不卡欧美精品一区二区三区| 五月婷婷综合激情| 制服.丝袜.亚洲.中文.综合 | 国产一区在线观看视频| 国产日韩成人精品| 99精品视频在线播放观看| 亚洲综合一区在线| 日韩一区二区免费在线电影| 国产美女精品人人做人人爽| 国产精品久久久久一区二区三区| 91国产丝袜在线播放| 日韩国产欧美在线观看| 欧美va亚洲va在线观看蝴蝶网| 国产高清不卡一区二区| 樱桃国产成人精品视频| 欧美一三区三区四区免费在线看| 国产剧情av麻豆香蕉精品| 国产精品久久久久影视| 欧美精品免费视频| 国产福利视频一区二区三区| 亚洲狠狠丁香婷婷综合久久久| 日韩一区二区中文字幕| gogogo免费视频观看亚洲一|