好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

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

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

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

寫在最前

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

效果預覽

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

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

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

巨人網絡通訊聲明:本文標題《canvas進階之貝塞爾公式推導與物體跟隨復雜曲線的軌跡運動》,本文關鍵詞  canvas,進階,之貝,塞爾,公式,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《canvas進階之貝塞爾公式推導與物體跟隨復雜曲線的軌跡運動》相關的同類信息!
  • 本頁收集關于canvas進階之貝塞爾公式推導與物體跟隨復雜曲線的軌跡運動的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 蜜桃成熟时2国语完整版在线播放| 黄色资源在线观看| 亚洲精品秘?一区二区三区影院忠贞 | 好爽毛片一区二区三区四妓女| 胸被捏的很爽动态图| 男女一起差差差带声音| 13路末班车电影在线观看| 国产99久久久欧美黑人 | 爱琴海论坛在线视频免费观看 | 嬷嬷羞耻调教后宫日常h| 日韩字幕在线| 亚洲色欧美| 放荡勾人引诱h秘书| 91少妇高潮喷水流白浆| 好男人社区资源www在线播放| 无码泼妇人妻AV视频| 素人搭讪泳池173女神下集| 性感美女网站| 久久久国产99久久国产久| 国产精品久久久久久精品闺蜜| 公车掀开奶罩边躁狠狠躁小说| 和闺蜜一起啪的好多水| bl(高h)文| 岳扒开内裤让我添| 成品人和精品人的区别在哪里知乎| 欧美男男gay69video| 老鸭窝最新地址| 古代强迫大肉h文| 欧美3p视频| 总裁受助理攻h| 美女的隐私视频网站下载| 琪琪888午夜伦伦电影理论片| 国产综合精品一区二区| 吴仁惠三级作品| 班花在教室伦流澡到高潮乳环| 40岁丰满特级A片| 太深了…我受不了呀| 性需求交友免费| AV无码乱码在线观看演员| 爱搞视频在线播放| 小婷好湿?好紧?太爽了视频|