雙圓弧插值演算法(二)

2022-02-03 17:51:44 字數 2078 閱讀 8374

雙圓弧插值演算法(二)

找到中心

找到連線點後,就可以求解圓心。我們定義乙個向量,n1,垂直於t1。這最終是乙個與(c1−p1)平行的標準化向量。從p1到c1的方向。

綜合起來,我們得到了c1的解。

通過檢查上述方程中的分母,我們可以看出,如果p1到pm的向量與t1共線,它將為零。圓的中心基本上被推到無窮遠,這給我們留下了p1和pm之間的一條直線,而不是一條弧。

對c2使用相同的方法得出:

選擇方向

現在我們需要選擇圍繞中心點旋轉的方向。這取決於d1和d2的符號。對於正的情況,我們選擇繞圓較短的路徑。對於否定的情況,我們走更長的路。讓我們看一些例子。

這種情況類似於初始標記圖中顯示的影象。d1和d2均為陽性。第乙個切線點朝向q1,第二個切線點遠離q2。

這裡我們有相同的端點,但是d1和d2是負數。第乙個切線點遠離q1,第二個切線點朝向q2。如你所見,我們沿著兩個圓圈走較長的路。

這個案子有點複雜。d1為負數,d2為正數。第乙個切點遠離q1,第二個切點遠離q2。我們只走第一圈的長路。這導致灰線在下午摺疊回自己。

最後一步是求解旋轉角。為了幫助解決這個問題,我們將定義×操作符,如下所示。

這就給了我們三維叉積的z分量。它相當於∣a∣b∣sinα,其中α是向量a和向量b之間的角度。由於sin值,我們可以根據正或負結果來確定旋轉方向。

如果圓弧的半徑為零,則可以將角度設定為零。否則,計算如下:

選擇d1             

選擇d1的值對biarc的形狀有很大的影響。負值將使其變長和彎曲。接近零的值將使第乙個弧緊湊。有些值甚至可以建立沒有解決方案的案例。

例如,在右邊的影象中,選擇了d1,使得q1位於通過第二個控制點的切線上。這導致連線點直接位於q2上,我們只能為第二個弧繪製一條直線。

通常,最好自動選擇d1值。最簡單可接受的方法是選擇乙個使d1=d2的值。這將建立一條相當平衡的曲線,並簡化了一些計算。把連線點方程中的d1換成d2,然後求解。

通常,最好自動選擇d1值。最簡單可接受的方法是選擇乙個使d1=d2的值。這將建立一條相當平衡的曲線,並簡化了一些計算。把連線點方程中的d1換成d2,然後求解。

案例1:

當二次公式可計算時,乙個解是正解,另乙個解是負解。我們總是想要正解,因為它代表了較短的弧。分母總是正的,判別式將大於(v⋅t)2,所以選擇正數形式會得到乙個正的結果。

案例2:

因為切線是標準化的,所以所有輸入都建立乙個大於或等於零的判別式。所以我們不需要擔心平方根。但是,當切線相等時,分母可以計算為零。為了支援這種情況,我們可以再次求解d2。

案例3:

我們需要處理的最後乙個邊情況發生在切線相等且v垂直於它們時。這將在情況2的解決方案中建立乙個零分母,意味著d1和d2處於無限遠的距離。這可以用兩個半圓來處理,如下所示:

agd插值演算法 常見插值演算法研究

最近在做心電相關的專案,由於微控制器的處理能力有限,在接收心電訊號之後需要對資料進行壓縮 其實是取一些特徵點 然後後期再進行顯示。但是在手持arm上進行顯示的時候,通過這些殘缺的資料繪出心電圖形是很困難的,這就要進行插值處理,所以進行了一些插值演算法相關的研究,常用的插值演算法是拉格郎日插值和牛頓插...

opencv的雙立方插值

寫opencv的時候用到了resize函式,看到乙個引數inter cubic cv interpolationflags inter cubic這個引數就是表示使用雙立方插值的方式對影象進行縮放。然後就去查了一下雙立方插值演算法。然後說一下雙立方插值怎麼計算的 1 先給出一張影象src 原影象 大...

插值查詢演算法

插值查詢演算法是基於二分查詢演算法的,只是在查詢的過程中計算middle的方式有所改變,比如一組可以通過二分查詢演算法計算出的nmid索引的值,是這樣子計算的 nmid nlow nhigh 2,但是插值查詢演算法是根據比率算出的,nmid nlow key narr nlow narr nhigh...