亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > HTML5 > 正文

canvas進階之貝塞爾公式推導與物體跟隨復雜曲線的軌跡運動

2024-09-05 07:22:18
字體:
來源:轉載
供稿:網友

寫在最前

在之前的這篇文章中我們提到了對于貝塞爾公式的運用。本次分享一下如何推導貝塞爾公式以及附一個簡單的🌰即小球跟隨曲線軌跡運動。

效果預覽

demo地址

對于如何繪制連續的貝塞爾曲線可以參照這篇文章:基于canvas使用貝塞爾曲線平滑擬合折線段

在本例中生成的曲線由以上文章中的源碼提供。

貝塞爾曲線公式推導

上面這張圖是貝塞爾曲線的完整公式,看起來一臉懵逼=。=,因為這是N階的推導公式,本次我們以一二階貝塞爾公式的推導來理解一下這個推導公式的由來。先來看下網上流傳已久的幾張貝塞爾動圖:

在這三張圖中最重要的部分是我們需要理解變量t。t的取值范圍是0-1。從上面的gif中也可以看出來似乎曲線的繪制過程就是t從0到1的過程。嗯其實就是這樣的。t的真實含義是什么呢?

在p0p1、p1p2、p2p3等等的起點到控制點再到終點的連線中,每段連線都被分割成了兩部分(仔細看動圖中的黑色、綠色、藍色圓點),各段連線中兩部分的比值都是相同的,比值范圍是0到1,而這個比值就是t

來看下面的一階貝塞爾曲線示意圖:

pt是p0p1上的任意一點,p0pt / ptp1 = t。從而我們可以引出下面的推導

此時t為時間,v為速度。我們可以看做從p0到p1的距離等于固定速度乘以固定時間

故到p上某一點的時間為固定的速度乘以某個時間值。同時固定的速度已經已經可以表示為上面的推導公式。此時等式右邊就形成了t(0,1) / t;即相當于某個時間值 / 固定時間值,即產生了我們一開始所強調的變量t,其取值范圍為[0,1]。從而下面的等式也就比較好理解了。

至此一階貝塞爾曲線我們已經推到了出來,其中變量為起點、終點與比值t。

那么二階公式如何從一階過渡過去呢?

來看下面這張圖:

其中Pp(t)的經過路徑就是我們所求的二階貝塞爾曲線,那么其實我們也可以將其從一階進行演變:

我們先將pa、pb兩個點所連線段當做一階曲線,之后再由兩端一階曲線分別表示pa、pb,最后就得到了我們的二階曲線公式。仔細觀察就能發現這和我們最初的完整公式是相同的:

其中n選擇不同數值時就可以得出不同階的曲線公式。同時從上面的推導過程也可以知道,不論是幾階曲線,我們都可以完全由一階來表示,而這個“表示”的過程就是我們在上面看到的形成動畫中那些輔助線。故可以感受下作者自己寫的曲線形成動畫中的效果,每段輔助線均由一階曲線形成:

相關地址

物體跟隨復雜曲線軌跡運動

當我們知道曲線的公式有何而來之后,如何讓小球沿著曲線運動就很好理解了。我們生成的每段曲線都是可以用公式表示出來的,也正因如此我們就可以得到每個t值時的曲線坐標點。從而知道物體的繪制坐標。

//核心邏輯LinearGradient.prototype.drawBall = function() {    var self = this    var item = ctrlNodesArr[ctrlDrawIndex]     //存儲了各段曲線的控制點    //各段曲線均為三階貝塞爾,故下面計算x,y值代入到了三階公式中    var ctrlAx = item.cAx,//各個控制點        ctrlAy = item.cAy,        ctrlBx = item.cBx,        ctrlBy = item.cBy,    ...    if(item.t > 1) {        ctrlDrawIndex++ //當一段曲線的t>1說明曲線已經走到頭    }else {        self.ctx.clearRect(0, 0, self.width, self.height)        item.t += 0.05        var ballX = ox * Math.pow((1 - item.t), 3) + 3 * ctrlAx * item.t * Math.pow((1 - item.t), 2) + 3 * ctrlBx * Math.pow(item.t, 2) * (1 - item.t) + x * Math.pow(item.t, 3)        var ballY = oy * Math.pow((1 - item.t), 3) + 3 * ctrlAy * item.t * Math.pow((1 - item.t), 2) + 3 * ctrlBy * Math.pow(item.t, 2) * (1 - item.t) + y * Math.pow(item.t, 3)        //代入三階貝塞爾曲線公式算出小球的坐標值        self.ctx.beginPath()        self.ctx.arc(ballX, ballY, 5, 0, Math.PI * 2, false)        self.ctx.fill()    }    if(ctrlDrawIndex !== ctrlNodesArr.length) {        window.requestAnimationFrame(newMap.drawBall.bind(self))    }}

最后

demo地址:這里✨✨

源碼地址:歡迎star

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲成人黄色网| 欧美性猛交xxxx黑人猛交| 亚洲免费av片| 久久这里有精品视频| 欧美放荡办公室videos4k| 国产在线拍揄自揄视频不卡99| 亚洲欧美日韩第一区| 久久久成人的性感天堂| 国产精品视频公开费视频| 青青精品视频播放| 欧美一级片久久久久久久| 高跟丝袜欧美一区| 欧美中文在线观看国产| 97久久精品视频| 精品美女久久久久久免费| 91精品成人久久| 亚洲免费视频观看| 欧美日韩激情视频| 国产成人精品一区二区三区| 日韩中文字幕在线视频播放| 国产精品青草久久久久福利99| 亚洲成年人在线| 伊人青青综合网站| 国产欧美在线播放| 久久99青青精品免费观看| 日韩欧美亚洲范冰冰与中字| 久久琪琪电影院| 久久久国产精品免费| 91在线观看免费高清| 国产视频丨精品|在线观看| 中文字幕9999| 亚洲精品福利在线| 国产精品尤物福利片在线观看| 国产日韩在线视频| 在线a欧美视频| 日韩网站免费观看| 国产精品视频内| 国产精品视频久久| 亚洲精品按摩视频| 亚洲精品免费网站| 国产精品尤物福利片在线观看| 69国产精品成人在线播放| 51久久精品夜色国产麻豆| 欧美日韩激情视频8区| 国产精品视频地址| 国产精品久久久久秋霞鲁丝| 亚洲欧美成人在线| 一区二区三区在线播放欧美| 欧美电影在线观看| 国产精自产拍久久久久久蜜| 欧美日韩国产综合视频在线观看中文| 在线观看欧美日韩| 久久精品小视频| 久久久免费在线观看| 久久久国产精彩视频美女艺术照福利| 成人高h视频在线| 韩国精品美女www爽爽爽视频| 色综合久久88色综合天天看泰| 精品香蕉在线观看视频一| 欧日韩不卡在线视频| 久久久噜噜噜久久久| 萌白酱国产一区二区| 亚洲欧美日韩精品久久| 亚洲美女在线视频| 俺去了亚洲欧美日韩| 黄网站色欧美视频| 久久精品91久久香蕉加勒比| 亚洲激情在线观看| 不卡av日日日| 国产精品久久久久久av下载红粉| 成人久久一区二区三区| 国产日韩在线播放| 欧美午夜电影在线| 国产精品视频最多的网站| 欧美一区亚洲一区| 亚洲欧洲在线看| 精品国产乱码久久久久久天美| 影音先锋欧美在线资源| 国产精品久久久久国产a级| 91精品久久久久久久久久久久久| 欧美激情在线有限公司| 精品亚洲一区二区三区| 亚洲欧洲视频在线| 国产精品av在线播放| 俺去了亚洲欧美日韩| 欧美精品情趣视频| 欧美午夜精品久久久久久人妖| 国产成人综合av| 性色av一区二区三区红粉影视| 亚洲最大福利视频网站| 国产91成人video| 黑人精品xxx一区| 国产精品美女久久久久久免费| 国产一级揄自揄精品视频| 久久手机精品视频| 欧美中文在线观看| 色综合久久88| 国产精品一区电影| 97精品国产aⅴ7777| 亚洲成人网在线观看| 韩国精品美女www爽爽爽视频| 日本久久久久久| 国内揄拍国内精品| 欧美成人免费在线观看| 日本精品一区二区三区在线| 日韩精品视频免费在线观看| 国产精品日本精品| 日本欧美精品在线| 全亚洲最色的网站在线观看| 57pao成人永久免费视频| 精品国偷自产在线| 欧美精品videos性欧美| 欧洲美女7788成人免费视频| 中文欧美日本在线资源| 国产精品永久在线| 亚洲国产成人精品女人久久久| 午夜精品美女自拍福到在线| 中文字幕视频一区二区在线有码| 亚洲xxxx做受欧美| 亚洲天堂网站在线观看视频| 久久久久999| 国产精品久久久久久久久免费看| 蜜月aⅴ免费一区二区三区| 黑人巨大精品欧美一区二区一视频| 亚洲第一网中文字幕| 久久成人亚洲精品| 日日骚久久av| 精品在线观看国产| 日本久久亚洲电影| 国产精品第七影院| 国产在线视频欧美| 在线看日韩欧美| 国产日韩欧美日韩大片| 色综合天天狠天天透天天伊人| y97精品国产97久久久久久| 欧美激情性做爰免费视频| 亚洲人成在线观| 国产视频丨精品|在线观看| 国产精品女主播视频| 欧美日韩激情美女| 国产精品久久久亚洲| 美日韩精品视频免费看| 色狠狠av一区二区三区香蕉蜜桃| 日韩精品视频在线播放| 欧美在线国产精品| 中文字幕av一区二区三区谷原希美| 国产一区二区av| 欧美激情一区二区三区高清视频| 日韩中文av在线| 精品国产一区二区三区久久| 欧美日韩成人黄色| 77777亚洲午夜久久多人| 亚洲精品视频免费| 欧美高清videos高潮hd| 日韩动漫免费观看电视剧高清| 欧美日韩激情网| 午夜精品一区二区三区在线| 国产suv精品一区二区| 日韩av不卡电影| 国产精品久久久久久久久久尿| 精品久久久久久久中文字幕| 国内免费久久久久久久久久久| 麻豆国产va免费精品高清在线| 最近免费中文字幕视频2019|