成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > 基于canvas使用貝塞爾曲線平滑擬合折線段的方法

基于canvas使用貝塞爾曲線平滑擬合折線段的方法

熱門標(biāo)簽:江蘇智能電銷機(jī)器人哪家好 鎮(zhèn)江智能外呼系統(tǒng)有效果嗎 四川點(diǎn)撥外呼系統(tǒng) 南寧點(diǎn)撥外呼系統(tǒng)哪家公司做的好 電銷機(jī)器人電話用什么卡 黃島區(qū)地圖標(biāo)注 云南大理400電話申請官方 成都智能外呼系統(tǒng)平臺 當(dāng)涂高德地圖標(biāo)注

寫在最前

本次分享一下在canvas中將繪制出來的折線段的棱角“磨平”,也就是通過貝塞爾曲線穿過各個(gè)描點(diǎn)來代替原有的折線圖。

為什么要平滑擬合折線段

先來看下Echarts下折線圖的渲染效果:

 

一開始我沒注意到其實(shí)這個(gè)折線段是曲線穿過去的,只認(rèn)為是單純的描點(diǎn)繪圖,所以起初我實(shí)現(xiàn)的“簡(丑)易(陋)”版本是這樣的:

不要關(guān)注樣式,重點(diǎn)就是實(shí)現(xiàn)之后才發(fā)現(xiàn)看起來人家Echarts的實(shí)現(xiàn)描點(diǎn)非常的圓滑,也由此引發(fā)了之后的探討。怎么有規(guī)律的畫平滑曲線?

效果圖

先來看下最終模仿的實(shí)現(xiàn):

因?yàn)槲乙膊恢繣charts內(nèi)部怎么實(shí)現(xiàn)的(逃

 

 

看起來已經(jīng)非常圓潤了,和我們最初的設(shè)想十分接近了。再看下曲線是否穿過了描點(diǎn):

 

好的!結(jié)果很明顯現(xiàn)在來重新看下我們的實(shí)現(xiàn)方式。

實(shí)現(xiàn)過程

  1. 繪制折線圖
  2. 貝塞爾曲線平滑擬合

模擬數(shù)據(jù)

var data = [Math.random() * 300];
        for (var i = 1; i < 50; i++) { //按照echarts
            data.push(Math.round((Math.random() - 0.5) * 20 + data[i - 1]));
        }
        option = {
            canvas:{
                id: 'canvas'
            },
            series: {
                name: '模擬數(shù)據(jù)',
                itemStyle: {
                    color: 'rgb(255, 70, 131)'
                },
                areaStyle: {
                    color: 'rgb(255, 158, 68)'
                },
                data: data
            }
        };

繪制折線圖

首先初始化一個(gè)構(gòu)造函數(shù)來放置需要用到的數(shù)據(jù):

function LinearGradient(option) {
    this.canvas = document.getElementById(option.canvas.id)
    this.ctx = this.canvas.getContext('2d')
    this.width = this.canvas.width
    this.height = this.canvas.height
    this.tooltip = option.tooltip
    this.title = option.text
    this.series = option.series //存放模擬數(shù)據(jù)
}

繪制折線圖:

LinearGradient.prototype.draw1 = function() { //折線參考線
    ... 
    //要考慮到canvas中的原點(diǎn)是左上角,
    //所以下面要做一些換算,
    //diff為x,y軸被數(shù)據(jù)最大值和最小值的取值范圍所平分的等份。
    this.series.data.forEach(function(item, index) {
        var x = diffX * index,
            y = Math.floor(self.height - diffY * (item - dataMin))
        self.ctx.lineTo(x, y) //繪制各個(gè)數(shù)據(jù)點(diǎn)
    })
    ...
}

貝塞爾曲線平滑擬合

貝塞爾曲線的關(guān)鍵點(diǎn)在于控制點(diǎn)的選擇,這個(gè)網(wǎng)站可以動(dòng)態(tài)的展現(xiàn)控制點(diǎn)不同而繪制的不同的曲線。而對于控制點(diǎn)的計(jì)算。。作者還是選擇了百度一下畢竟數(shù)學(xué)不好:)。具體算法有興趣的同學(xué)可以深入了解下,現(xiàn)在直接說下計(jì)算控制點(diǎn)的結(jié)論。

上面的公式涉及到四個(gè)坐標(biāo)點(diǎn),當(dāng)前點(diǎn),前一個(gè)點(diǎn)以及后兩個(gè)點(diǎn),而當(dāng)坐標(biāo)值為下圖展示的時(shí)候繪制出來的曲線如下所示:

不過會有一個(gè)問題就是起始點(diǎn)和最后一個(gè)點(diǎn)不能用這個(gè)公式,不過那篇文章也給出了邊界值的處理辦法:

 

所以在將折線換成平滑曲線的時(shí)候,將邊界值以及其他控制點(diǎn)計(jì)算好之后代入到貝塞爾函數(shù)中就完成了:

//核心實(shí)現(xiàn)
this.series.data.forEach(function(item, index) { //找到前一個(gè)點(diǎn)到下一個(gè)點(diǎn)中間的控制點(diǎn)
    var scale = 0.1 //分別對于ab控制點(diǎn)的一個(gè)正數(shù),可以分別自行調(diào)整
    var last1X = diffX * (index - 1),
        last1Y = Math.floor(self.height - diffY * (self.series.data[index - 1] - dataMin)),
        //前一個(gè)點(diǎn)坐標(biāo)
        last2X = diffX * (index - 2),
        last2Y = Math.floor(self.height - diffY * (self.series.data[index - 2] - dataMin)),
        //前兩個(gè)點(diǎn)坐標(biāo)
        nowX = diffX * (index),
        nowY = Math.floor(self.height - diffY * (self.series.data[index] - dataMin)),
        //當(dāng)期點(diǎn)坐標(biāo)
        nextX = diffX * (index + 1),
        nextY = Math.floor(self.height - diffY * (self.series.data[index + 1] - dataMin)),
        //下一個(gè)點(diǎn)坐標(biāo)
        cAx = last1X + (nowX - last2X) * scale,
        cAy = last1Y + (nowY - last2Y) * scale,
        cBx = nowX - (nextX - last1X) * scale,
        cBy = nowY - (nextY - last1Y) * scale 
    if(index === 0) {
        self.ctx.lineTo(nowX, nowY)
        return
    } else if(index ===1) {
        cAx = last1X + (nowX - 0) * scale
        cAy = last1Y + (nowY - self.height) * scale 
    } else if(index === self.series.data.length - 1) {
        cBx = nowX - (nowX - last1X) * scale
        cBy = nowY - (nowY - last1Y) * scale
    } 
        self.ctx.bezierCurveTo(cAx, cAy, cBx, cBy, nowX, nowY);
        //繪制出上一個(gè)點(diǎn)到當(dāng)前點(diǎn)的貝塞爾曲線
    })

由于我每次遍歷的點(diǎn)都是當(dāng)前點(diǎn),但是文章中給出的公式是計(jì)算會知道下一個(gè)點(diǎn)的控制點(diǎn)算法,故在代碼實(shí)現(xiàn)中我將所有點(diǎn)的計(jì)算挪前了一位。當(dāng)index = 0時(shí)也就是初始點(diǎn)是不需要曲線繪制的,因?yàn)槲覀兝L制的是從前一個(gè)點(diǎn)到當(dāng)前點(diǎn)的曲線,沒有到0的曲線需要繪制。從index = 1開始我們就可以正常開始繪制,從0到1的曲線,由于index = 1時(shí)是沒有在他前面第二個(gè)點(diǎn)的故其屬于邊界值點(diǎn),也就是需要特殊進(jìn)行計(jì)算,以及最后一個(gè)點(diǎn)。其余均按照正常公式算出AB的xy坐標(biāo)代入貝塞爾函數(shù)即可。

最后

源代碼見這里

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

標(biāo)簽:西寧 咸寧 佳木斯 廣西 十堰 南京 淮安 酒泉

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《基于canvas使用貝塞爾曲線平滑擬合折線段的方法》,本文關(guān)鍵詞  基于,canvas,使用,貝,塞爾,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《基于canvas使用貝塞爾曲線平滑擬合折線段的方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于基于canvas使用貝塞爾曲線平滑擬合折線段的方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧洲天堂在线观看| 日产电影一区二区三区| 国产成人av电影在线播放| 久久婷婷五月综合色国产香蕉| 好男人看片在线观看免费观看国语| 精品人妻少妇AV无码专区| 亚洲一区精品在线观看| 日韩一区二区免费电影| 男人的天堂色| 99精品免费视频| 国内精品女同女同一区二区三区| 日本一二三四区视频| 午夜精品久久久久久久久久久久久蜜桃| 国产婷婷成人久久av免费高清| 成人免费观看视频在线观看| 欧美精品一区二区免费| 亚洲欧美日韩不卡一区二区三区| 高h视频在线观看| 欧美视频在线观看网站| 黄在线免费看| 欧美日韩成人在线一区| 国产一区二区三区视频免费| 日本大胆人体视频| 一区二区成人在线观看| 久久99国产精品一区| 亚洲国产第一页| 国产婷婷色一区二区在线观看| 特级黄色片视频| 高清在线一区| 欧美黄污视频| 男人日女人视频网站| 天堂√在线中文官网在线| 亚洲成人在线播放| 国产午夜在线视频| 亚洲片在线观看| 2019国产精品自在线拍国产不卡| 成人亲热视频网站| 久久99影视| 久久久精品蜜桃| 亚洲精品一二三四区| 免费日韩一区二区三区| 日韩激情久久| 国产精品卡一卡二| 日韩精品欧美国产精品忘忧草| 久久久999视频| 日韩经典中文字幕在线观看| 先锋影音av中文资源| 老司机在线免费视频| 青青青伊人色综合久久| 亚洲日日夜夜| 日韩三区在线观看| 极品尤物av久久免费看| 在线观看一区二区三区四区| 99色在线播放| 四季av在线一区二区三区| 午夜欧美在线一二页| 亚洲另类一区二区| 成人av小说网| 福利电影一区二区三区| 三级精品在线观看| 欧美乱大交做爰xxxⅹ性3| jiuse九色最新地址| 极品久久久久久久| 综合久久久久综合| 波多野结衣一区| 成人午夜视频一区二区播放| 人人爽香蕉精品| 午夜福利视频一区二区| 91免费视频网址| 欧美高跟鞋交xxxxhd| 国产三区四区在线观看| 蜜桃国内精品久久久久软件9| 亚洲精品视频在线观看视频| 黄色一级免费| 成人在线视频www| 亚洲视频精品在线| 亚色视频在线播放| 欧美成人精品二区三区99精品| 国产在线高潮| 91精品久久久久久综合五月天| 日本毛片在线免费观看| av资源站一区| 精品九九久久| 成人免费观看视频在线观看| av日韩电影| 日韩一区国产二区欧美三区| 91av亚洲| 特级西西444www高清大视频| 亚洲高清在线观看| 日产精品高清视频免费| 三级av网站| 日韩你懂的在线播放| 亚洲电影在线看| 在线视频观看一区二区| 日韩精品在线不卡| 国产精品入口麻豆电影| 久久亚洲一区二区三区四区| 超碰在线99| 91久久久免费一区二区| 欧美精品一区二区三区久久久竹菊| 亚洲高清三级视频| 波多野结衣作品集| 精品成人一区二区三区| 波多野结衣在线观看| 黄毛片在线观看| 尤物在线观看| 在线免费观看视频一区| 久久综合给合久久狠狠狠97色69| 久久精品成人欧美大片古装| 国产麻豆一级片| 成人亚洲成人影院| 翔田千里一区二区| ijzzijzzij亚洲大全| 天美传媒免费在线观看| 国产91在线免费| 欧美激情偷拍| 亚洲精品卡一卡二| 欧美黄色免费网站| 少妇高潮爽到全身痉挛抽搐| 九色porny在线| 国产一区二区三区四区老人| 国内精品国产三级国产aⅴ久| 精品人妻人人做人人爽夜夜爽| 精品久久久久久久久久中文字幕| 国产91精品久久久久久久| 欧美日韩在线观看一区二区| 国产视频在线免费观看| 亚洲一区二区国产| 亚洲18私人小影院| 精品一区二区6| 无码av免费精品一区二区三区| 成人在线一区二区| 国产农村妇女精品久久| 色婷婷激情久久| 自拍偷拍欧美专区| 国产一级精品在线| 欧美性受ⅹ╳╳╳黑人a性爽| 日韩影视高清在线观看| 欧美成人一级视频| av亚洲一区二区三区| 精品91久久久久| 全国精品免费看| 久久婷婷国产综合精品青草| 天天操天天搞| 国产毛片久久久久久| 亚洲欧美日本视频在线观看| 午夜视频在线播放| 国产精彩视频在线观看| 国产一区啦啦啦在线观看| 国产精品国产精品88| 高清不卡一区二区| 视色视频在线观看| 91成人国产综合久久精品| 日日摸夜夜添夜夜添精品视频| 97超级碰在线看视频免费在线看| 国产精品三级av在线播放| 久久精品女人天堂| 97超碰青青草| 日韩精品亚洲元码| 精品成a人在线观看| 久久久久麻豆v国产精华液好用吗| 99er在线视频| 欧美极品少妇xxxxⅹ喷水| 日本不卡免费高清视频| 国产欧美二区| 91啦中文成人| 在线免费看视频| 在线免费观看色| 国产伦乱精品| 7777精品伊人久久久大香线蕉最新版| 成人午夜精品久久久久久久蜜臀| 一个人看的日本www的免费视频| 亚洲最新在线| 91久久国语露脸精品国产高跟| 久久久久久久久久久97| 国产精品色网| 综合国产在线| 久久久久久亚洲精品中文字幕| 午夜免费激情视频| 久久亚洲国产成人精品性色| 亚洲欧美综合精品久久成人| 亚洲精品字幕在线观看| 激情欧美日韩一区| 视频在线观看免费影院欧美meiju| 韩国精品久久久999| 国产熟女一区二区丰满| 成人精品免费看| 日韩av免费播放| 成人av黄色| 美女撒尿一区二区三区| 极品尤物av丝袜美腿在线观看| 日韩大片在线免费观看| 福利视频一二区| 在线黄色国产视频| www.日本xxxx| 男女小视频在线观看| 丰满大乳奶做爰ⅹxx视频| 国产精品18久久久久久久久| 国产视频在线观看一区二区| 美国黑人一级大黄| 99视频免费| 91肉色超薄丝袜脚交一区二区| 天天骑天天干| 国产午夜无码视频在线观看| 国产精品一区二区av影院萌芽| 精品国产乱码久久久久久蜜坠欲下| 国产精品狼人久久影院观看方式| 国模吧一区二区| 久久婷婷国产麻豆91天堂| 蜜臀久久99精品久久久久久9| 午夜精彩视频| 国产wwwxx| 天堂…中文在线最新版在线| 欧洲一级毛片| 日本三级久久| 久草在线新视觉| 欧美电影在线观看网站| 紧缚捆绑精品一区二区| 在线观看欧美日韩电影| 97在线电影| 一区二区三区午夜| 91精品国产综合久久香蕉最新版| 国产一区二区三区乱码| 小h片在线观看| 午夜老司机精品| 国产亚洲精品bt天堂精选| 蜜桃tv在线播放| av在线电影播放| 超碰公开在线| 8mav模特福利视频在线观看| 成人天堂yy6080亚洲高清| 色中色综合影院手机版在线观看| 精品视频在线播放免| 国产91在线播放精品| 欧美日韩在线国产| 一区二区三区欧美成人| 亚州av综合色区无码一区| 激情影院在线| 欧美日韩免费高清| 亚洲精品综合一区二区三区| 成人女性文胸| 天堂精品久久久久| 成人精品一二三区| 97国产精品免费视频| 国产日韩欧美精品一区| 日韩美女在线视频| 国产黄色在线网站| 亚洲xxxx2d动漫1| 久草视频免费看| 亚洲欧美国产精品久久久久久久| 手机av在线不卡| 131美女爱做视频| 丝袜美腿亚洲一区二区图片| 另类高清dbsm日本tvav| 国产精品久久久久久久久久妞妞| 天天综合天天操| 亚洲成av人片在线观看香蕉| 麻豆网站在线免费观看| 中文字幕av一区二区三区| 欧美性猛交xxxx乱大交极品| 日韩少妇中文字幕| 狠狠色狠狠色综合日日五| av在线综合网| 精品视频一区三区九区| 欧美成人精品在线播放| 人人妻人人澡人人爽欧美一区| 久久久国产成人精品| 欧美日韩伦理一区二区| 亚洲男人的天堂av| 成人爽a毛片一区二区| 成人av综合在线| 亚洲精品乱码久久久久久日本蜜臀| 麻豆国产欧美日韩综合精品二区| 男女高潮又爽又黄又无遮挡| 黄色av免费在线播放| 欧美知名女优| 亚洲成人久久久| 黄色网址视频在线观看| 宅男噜噜噜66一区二区66| 日本最黄视频| 337p日本| 男女激情视频一区| 国产精品v一区二区三区| 国产女人18水真多毛片18精品| 牛牛电影国产一区二区| 最近中文字幕免费在线观看| 欧美视频免费看欧美视频| 波多野结衣视频免费观看| 久久精品人人做人人综合| 老司机精品视频在线观看6| 91老司机精品视频| 国产精品186在线观看在线播放| 国产乱淫av片免费| 日韩精品在线观看网站| 另类高清dbsm日本tvav| av资源在线播放| 免费成人进口网站| 亚洲娇小xxxx欧美娇小| 亚洲二区在线播放视频| 人狥杂交一区欧美二区| 亚洲影院在线播放| 麻豆精品一区二区综合av| 成人av免费在线观看| 亚洲男人天堂久久| 免费的国产精品| 欧美日韩精品中文字幕| 无遮挡爽大片在线观看视频| 欧美专区在线观看一区| 四虎影视免费看电影| free性护士videos欧美| 成人伊人精品色xxxx视频| 中文字幕综合| 成年网址网站在线观看| 亚洲精品videosex极品| a毛片在线看免费观看| 污污网站在线观看| 欧美1级日本1级| 涩多多在线观看| 日韩伦理一区二区三区av在线| 国产精品久久久久久久久影视| 亚洲区一区二区三| 亚洲欧洲高清| 国产福利在线免费观看| 亚洲精品亚洲人成在线| 亚洲美女av网站| 日韩电影在线观看永久视频免费网站| 日韩人妻无码精品综合区| 91精品麻豆日日躁夜夜躁|