雙圓弧插值算法(一)


雙圓弧插值算法(一)

Biarc Interpolation

在游戲開發中經常出現兩點間的插值問題。大多數情況下,只需要一個簡單的線性插值。線性插值很好,因為不會真的弄錯。只有一條可能的線連接這些點。跟着走。當需要曲線插值時,求解會變得復雜得多。有無限數量的曲線可供選擇,並有許多方法來生成:NURBS、Catmull Rom、zier、Hermite等。

想討論一種生成圓形圓弧的不太常見的方法。             

為什么想要一個圓插值?一個原因可能是看起來很悅目,但也有一些實際用途。如果正在制作一個放置道路的水平編輯工具(或使用程序性道路制作游戲),可能希望轉彎處與真實世界中的道路相似。第二個例子,也是經常遇到的一個例子,是在劍后產生軌跡。揮劍的動作通常非常快。當劍在攻擊中弧線時,只能得到幾個樣本點。如果以慢動作播放動畫,會發現劍尖的軌跡相當圓。通過在采樣點之間生成圓弧,可以生成干凈的軌跡。             

這里有一個為間諜編程的劍跡的例子。整個旋轉過程中可能只有五到六個樣本,但能夠創建一個平滑的頂點弧。Spyborgs算法與將要介紹的有點不同,但是產生了類似的結果(如果知道要查找什么,實際上會稍微差一點)。              

那么,要如何創建這些曲線呢?解決方案在於一個稱為biarc的幾何學。

雙圓弧

雙圓弧是由兩個圓弧組成的曲線,使與匹配的切線相連。幾乎每一對控制點都可以通過一個biarc連接起來,而失敗的控制點在實踐中並沒有出現。下面是一些將紅色控制點連接到藍色控制點的biarc示例。

一旦可以求解兩個控制點之間的biarc,那么將一系列控制點與一系列biarc連接起來就很簡單了。這就是所謂的分段圓曲線。             

目標             

將生成兩個圓弧作為輸入。

假設輸入切線是標准化的。換句話說:

找到連接             

在求解弧之前,需要找到連接點,pm。

現在可以選擇d1的任意實數,得到系統的解。根據值的不同,可以得到一個短的biarc或一個長的螺旋biarc。在右邊的圖像中,可以看到d1的不同值如何生成連接相同兩個控制點的不同biarc。稍后將討論自動為d1選擇一個令人滿意的值的方法。

邊緣案例             

如果d2方程中的分母為零,需要處理d2為無窮大的情況。這意味着t2和連接點的切線是平行的。這將創建一個半圓(請參見右側顯示的藍色弧)。知道連接切線是t2,可以說明以下內容:              

連接點pm必須位於q1外與t2平行的線上。             

p2到pm的向量必須垂直於t2。 

 從數學上講,這是:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM