双圆弧插值算法(一)
雙圓弧插值算法(一)
Biarc Interpolation
在游戲開發(fā)中經(jīng)常出現(xiàn)兩點(diǎn)間的插值問題。大多數(shù)情況下,只需要一個(gè)簡(jiǎn)單的線性插值。線性插值很好,因?yàn)椴粫?huì)真的弄錯(cuò)。只有一條可能的線連接這些點(diǎn)。跟著走。當(dāng)需要曲線插值時(shí),求解會(huì)變得復(fù)雜得多。有無限數(shù)量的曲線可供選擇,并有許多方法來生成:NURBS、Catmull Rom、Bézier、Hermite等。
想討論一種生成圓形圓弧的不太常見的方法。
為什么想要一個(gè)圓插值?一個(gè)原因可能是看起來很悅目,但也有一些實(shí)際用途。如果正在制作一個(gè)放置道路的水平編輯工具(或使用程序性道路制作游戲),可能希望轉(zhuǎn)彎處與真實(shí)世界中的道路相似。第二個(gè)例子,也是經(jīng)常遇到的一個(gè)例子,是在劍后產(chǎn)生軌跡。揮劍的動(dòng)作通常非常快。當(dāng)劍在攻擊中弧線時(shí),只能得到幾個(gè)樣本點(diǎn)。如果以慢動(dòng)作播放動(dòng)畫,會(huì)發(fā)現(xiàn)劍尖的軌跡相當(dāng)圓。通過在采樣點(diǎn)之間生成圓弧,可以生成干凈的軌跡。
這里有一個(gè)為間諜編程的劍跡的例子。整個(gè)旋轉(zhuǎn)過程中可能只有五到六個(gè)樣本,但能夠創(chuàng)建一個(gè)平滑的頂點(diǎn)弧。Spyborgs算法與將要介紹的有點(diǎn)不同,但是產(chǎn)生了類似的結(jié)果(如果知道要查找什么,實(shí)際上會(huì)稍微差一點(diǎn))。
那么,要如何創(chuàng)建這些曲線呢?解決方案在于一個(gè)稱為biarc的幾何學(xué)。
雙圓弧
雙圓弧是由兩個(gè)圓弧組成的曲線,使與匹配的切線相連。幾乎每一對(duì)控制點(diǎn)都可以通過一個(gè)biarc連接起來,而失敗的控制點(diǎn)在實(shí)踐中并沒有出現(xiàn)。下面是一些將紅色控制點(diǎn)連接到藍(lán)色控制點(diǎn)的biarc示例。
一旦可以求解兩個(gè)控制點(diǎn)之間的biarc,那么將一系列控制點(diǎn)與一系列biarc連接起來就很簡(jiǎn)單了。這就是所謂的分段圓曲線。
目標(biāo)
將生成兩個(gè)圓弧作為輸入。
假設(shè)輸入切線是標(biāo)準(zhǔn)化的。換句話說:
找到連接
在求解弧之前,需要找到連接點(diǎn),pm。
現(xiàn)在可以選擇d1的任意實(shí)數(shù),得到系統(tǒng)的解。根據(jù)值的不同,可以得到一個(gè)短的biarc或一個(gè)長(zhǎng)的螺旋biarc。在右邊的圖像中,可以看到d1的不同值如何生成連接相同兩個(gè)控制點(diǎn)的不同biarc。稍后將討論自動(dòng)為d1選擇一個(gè)令人滿意的值的方法。
邊緣案例
如果d2方程中的分母為零,需要處理d2為無窮大的情況。這意味著t2和連接點(diǎn)的切線是平行的。這將創(chuàng)建一個(gè)半圓(請(qǐng)參見右側(cè)顯示的藍(lán)色弧)。知道連接切線是t2,可以說明以下內(nèi)容:
連接點(diǎn)pm必須位于q1外與t2平行的線上。
從p2到pm的向量必須垂直于t2。
從數(shù)學(xué)上講,這是:
總結(jié)
以上是生活随笔為你收集整理的双圆弧插值算法(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解读模拟摇杆原理及实验
- 下一篇: 双圆弧插值算法(二)