一、簡要介紹
catmull-rom演算法保證兩點:
1、點pi的一階導數等於pi+1 - pi-1,即點pi的切向量和其相鄰兩點連線的切向量是平行的;
2、穿過所有pi點。這是與貝塞爾曲線的最大區別,正因為這樣的特性,使得catmull-rom演算法適於用作軌跡線演算法。
點pi處的切線記作:τ (pi+1 − pi−1)。此演算法的轉換矩陣如下:
二、演算法推導
首先,此演算法工作需要四個點,p0(pi-2)、p1(pi-1)、p2(pi)、p3(pi+1)。
τ用於影響扭曲程度。
作為乙個立方插值函式,抽象原型如下,我們需要做的就是求出下式中的c0、c1、c2、c3。
根據下圖的抽象,我們可以得出四個等式:
將引數0、1代入即可得:
將c0、c1代入其它兩式後,可得下式:
解得:
最終結果為:
注意:我們的控制點雖然有4個,但是繪製的曲線卻只能夠通過中間的兩個點。這就帶來 如果想曲線同時過這四個點,該怎麼處理的問題。其實處理方法十分簡單,我們只要人為的構造乙個起點和終點來構成四個控制點即可。比如現在有p0,p1,p2,p3,如果用[p0,p1,p2,p3]構造曲線,曲線將只能夠通過p1-p2,為了讓曲線能夠通過p0和p3,我們可以人為的構造出如下的控制點[2p0 - p1,p0,p1,p2],以及[p1, p2, p3, 2p3 - p2]。通過這樣的方法,就能夠繪製一條經過所有控制點的曲線了。
參考部落格:
agd插值演算法 常見插值演算法研究
最近在做心電相關的專案,由於微控制器的處理能力有限,在接收心電訊號之後需要對資料進行壓縮 其實是取一些特徵點 然後後期再進行顯示。但是在手持arm上進行顯示的時候,通過這些殘缺的資料繪出心電圖形是很困難的,這就要進行插值處理,所以進行了一些插值演算法相關的研究,常用的插值演算法是拉格郎日插值和牛頓插...
插值查詢演算法
插值查詢演算法是基於二分查詢演算法的,只是在查詢的過程中計算middle的方式有所改變,比如一組可以通過二分查詢演算法計算出的nmid索引的值,是這樣子計算的 nmid nlow nhigh 2,但是插值查詢演算法是根據比率算出的,nmid nlow key narr nlow narr nhigh...
插值查詢演算法
在均勻分布的有序數列中,會比二分查詢次數少很多 思想跟二分查詢一直,都是找到其中乙個值,小了往左找,大了往右找 區別是 也跟二分查詢差不多,就公式不同,不過因為公式複雜了一些,需要一些判斷條件來保證它的正確性 public static int binarysearch int arr,int ke...