两点三次埃尔米特插值法
生活随笔
收集整理的這篇文章主要介紹了
两点三次埃尔米特插值法
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
怎樣用畫筆畫光滑曲線-兩點(diǎn)三次埃爾米特插值法(轉(zhuǎn)自http://blog.sina.com.cn/s/blog_a8192bdd010105rx.html)
求幾點(diǎn)(3點(diǎn)以上)之間的光滑曲線是有很多辦法的,如果需要曲線通過目標(biāo)點(diǎn),可以用經(jīng)典的三次樣條曲線,如果不需要曲線通過目標(biāo)點(diǎn),可以使用貝塞爾曲線。 例如,用三次樣條曲線,只要有4點(diǎn),并且確定兩邊界點(diǎn)的斜率,既可以求得通過4點(diǎn)的光滑曲線,曲線在各端點(diǎn)處有2階光滑性。至于三次樣條曲線的公式及算法,可以隨便買一本《數(shù)值分析》研究一下。但我這幾天遇到的問題是,通過畫筆繪制曲線時(shí),要繪制成光滑曲線。 畫筆的繪制同已知幾點(diǎn)求光滑曲線不同,畫筆要求的是實(shí)時(shí)繪制,也就是說畫筆走到哪就要把光滑曲線畫到哪,這里如果使用三次樣條曲線,局限性就在于,以下圖為例:
當(dāng)畫筆走到B時(shí),只有AB兩個(gè)端點(diǎn),這時(shí)就要畫出AB之間的曲線(實(shí)時(shí)性),而三次樣條曲線要求有3點(diǎn)以上,這時(shí)就無法通過三次樣條曲線繪制出AB之間的光滑曲線。 其實(shí)可以變通一下,在畫筆走到C的時(shí)候(而不是走到B時(shí))才畫出曲線,也就是曲線和畫筆的位置有一步的延遲,這樣走到C的時(shí)候就可以確定ABC三點(diǎn)。 但是這里還存在一個(gè)問題,三次樣條曲線需要制定兩端點(diǎn)的斜率,當(dāng)畫筆走到C時(shí),如果要畫出ABC之間的光滑曲線,需要知道A點(diǎn)的斜率和C點(diǎn)的斜率,當(dāng)畫筆走到D時(shí),需要知道B點(diǎn)的斜率和D點(diǎn)的斜率。 其實(shí)A點(diǎn)和B點(diǎn)這種(不是最后一個(gè)端點(diǎn))的斜率還是可以給出的,但C點(diǎn)和D點(diǎn)這種最后一個(gè)端點(diǎn)的斜率缺無法給出,因?yàn)楫?dāng)畫筆走到C時(shí),無法確定下一個(gè)D點(diǎn)的位置,所以無法確定CD的斜率,也就沒有辦法確定C點(diǎn)的斜率。 也曾考慮過當(dāng)畫筆走到D點(diǎn)時(shí)再繪制前3點(diǎn)的曲線,但是如果這樣,那么假設(shè)存在下一點(diǎn)E,那么走到E的時(shí)候,ABC之間的曲線已經(jīng)存在,這個(gè)時(shí)候僅需要繪制CD之間的曲線,又和以開始的繪制3點(diǎn)之前曲線有沖突。延伸下去考慮,其實(shí)在D點(diǎn)以后,問題已經(jīng)演變?yōu)楫嬃咙c(diǎn)之間光滑曲線,因此把前3個(gè)點(diǎn)的問題也轉(zhuǎn)化為2點(diǎn)之間光滑曲線的問題。 可以考慮的方法是: 1、前提條件是曲線永遠(yuǎn)比畫筆延遲一步(這在實(shí)際繪制過程中用戶是完全察覺不到的)。 2、當(dāng)走到C點(diǎn)時(shí),繪制AB的曲線,走到D點(diǎn)時(shí),繪制BC的曲線。 3、兩點(diǎn)之間的光滑曲線使用“兩點(diǎn)三次埃爾米特”公式求曲線方程。 由于兩點(diǎn)三次埃爾米特方程也需要給定兩端點(diǎn)的斜率,因此問題又回到求斜率的問題上。 繼續(xù)思考一下,假設(shè)A點(diǎn)是起始點(diǎn),那么畫筆走到C時(shí)要繪制AB兩點(diǎn)之間光滑曲線,需要給定A點(diǎn)和B點(diǎn)的斜率,由于A點(diǎn)是開始點(diǎn),所以給定斜率比較麻煩(也不是不可能),可以將問題轉(zhuǎn)化為起始點(diǎn)A的斜率等于直線AB的斜率。 那么B點(diǎn)的斜率是什么樣呢,由圖可知B點(diǎn)斜率介于AB斜率和BC斜率之間,所以可以近似取為AB和BC斜率的一半(AB和BC的中間線)。這樣就可以通過兩點(diǎn)三次埃爾米特公式計(jì)算出AB兩點(diǎn)間的曲線了(實(shí)際上根據(jù)這個(gè)方法繪制的AB間為直線)。 繼續(xù)走到D點(diǎn),走到D點(diǎn)時(shí)需要繪制BC點(diǎn)的曲線,由于在C點(diǎn)時(shí)已經(jīng)計(jì)算了B點(diǎn)斜率為AB、BC的中間線,所以B點(diǎn)斜率已知,同樣方法可以取C點(diǎn)斜率為BC、CD中間線為C點(diǎn)斜率,這樣已知BC兩點(diǎn)斜率再通過兩點(diǎn)三次埃爾米特公式即可求得BC之間曲線方程。 以此類推可以跟蹤畫筆繪制出光滑曲線。 本方法的局限性有3: 1、B點(diǎn)處1階、2階導(dǎo)數(shù)不連續(xù)(因?yàn)锳B為直線,而BC為三次曲線),可以通過近似給得A點(diǎn)斜率方法彌補(bǔ),不做贅述。 2、曲線始終滯后畫筆一個(gè)步驟(這在實(shí)際中用戶無法感覺到)。 3、由于中間端點(diǎn)的斜率始終取為兩條相交直線的中心線,所以理論上相對(duì)于三次樣條曲線不夠精確(也許光滑度和曲線形狀上欠佳)。 但實(shí)際根據(jù)以上思路實(shí)現(xiàn)之后發(fā)現(xiàn)基本上是感覺不到局限性的,所繪制曲線比較另人滿意。 由于本人水平有限,還沒有考慮出更好的方法跟蹤畫筆繪制出光滑曲線。也許本文提到的方法可以進(jìn)一步優(yōu)化。我會(huì)繼續(xù)研究。
總結(jié)
以上是生活随笔為你收集整理的两点三次埃尔米特插值法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AI人工智能学习准备之路线图
- 下一篇: 微信小程序开发之倒计时定时器