Cesium
Cesium 是一款面向三維地球和地圖的,世界級的JavaScript開源產品。它提供了基於JavaScript語言的開發包,方便用戶快速搭建一款零插件的虛擬地球Web應用,並在性能,精度,渲染質量以及多平台,易用性上都有高質量的保證。
效果圖
關於插值的認識
在Cesium官網中有介紹飛機飛行路線插值的例子,介紹了3中插值的使用方式。
分別是:
LinearApproximation
-
entity.position.setInterpolationOptions({
-
interpolationDegree : 1,
-
interpolationAlgorithm : Cesium.LinearApproximation
-
});
LagrangePolynomialApproximation
-
entity.position.setInterpolationOptions({
-
interpolationDegree : 5,
-
interpolationAlgorithm : Cesium.LagrangePolynomialApproximation
-
});
HermitePolynomialApproximation
-
entity.position.setInterpolationOptions({
-
interpolationDegree : 2,
-
interpolationAlgorithm : Cesium.HermitePolynomialApproximation
-
});
關於樣條插值
百度百科給的解釋是:
樣條插值法是一種以可變樣條來作出一條經過一系列點的光滑曲線的數學方法。插值樣條是由一些多項式組成的,每一個多項式都是由相鄰的兩個數據點決定的,這樣,任意的兩個相鄰的多項式以及它們的導數(不包括仇階導數)在連接點處都是連續的。
一位搞游戲引擎開發的博主在博客上是這樣的說的:
在離散數據的基礎上補插連續函數,使得這條連續曲線通過全部給定的離散數據點。插值是離散函數逼近的重要方法,利用它可通過函數在有限個點處的取值狀況,估算出函數在其他點處的近似值。插值可以用於填充圖像變換時像素之間的空隙。插值,擬合,逼近是數值分析的三大基礎工具,通俗意義上它們的區別在於:插值是已知點列並且完全經過點列;擬合是已知點列,從整體上靠近它們,逼近是已知曲線,或者點列,通過逼近使得構造的函數無限靠近它們。科學和工程問題可以通過諸如采樣、實驗等方法獲得若干離散的數據,根據這些數據,我們往往希望得到一個連續的函數(也就是曲線)或者更加密集的離散方程與已知數據相吻合。
插值問題的提法是:假定區間[a,b]上的實值函數f(x)在該區間上 n+1個互不相同點x0,x1……xn 處的值是f (x0),……f(xn),要求估算f(x)在[a,b]中某點x的值。基本思路是,找到一個函數P(x),在x0,x1……xn 的節點上與f(x)函數值相同(有時,甚至一階導數值也相同),用P(x)的值作為函數f(x*)的近似。簡單地講就是已知數據上的若干值,為其補上未知的值。
樣條方程是一類分段光滑、並且在各段交接處也有一定光滑性的函數。樣條一詞來源於工程繪圖人員為了將一些指定點連接成一條光順曲線所使用的工具,即富有彈性的細木條或薄鋼條。由這樣的樣條形成的曲線在連接點處具有連續的坡度與曲率。分段低次多項式、在分段處具有一定光滑性的函數插值就是模擬以上原理發展起來的,它克服了高次多項式插值可能出現的振盪現象,具有較好的數值穩定性和收斂性,由這種插值過程產生的函數就是多項式樣條函數。
Cesium中的樣條插值
在cesium里,提供了三種樣條插值方法,LinearSpline,CatmullRomSpline,HermiteSpline。
在具體的實例上,可以使用樣條插值法利用已知的控制點,插值出一系列的點,用於平滑曲線,特別是在路徑的追朔重演。
下面,我們分別介紹這三種樣條插值的使用方法以及效果。
更多詳情見小專欄此文章:GIS之家cesium小專欄
文章提供源碼,對本專欄感興趣的話,可以關注一波