Catmull Rom插值演算法

2021-10-01 08:30:43 字數 1597 閱讀 4034

一、簡要介紹

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...