柏拉圖認(rèn)為,盡管世間萬物是不完美的,但存在一種永恒不變的形式,這個形式是完美的,而生命的意義就是讓這個世界盡可能的接近這個完美的形式。
在黃浦等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站建設(shè)、成都做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作按需求定制設(shè)計(jì),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),營銷型網(wǎng)站建設(shè),外貿(mào)網(wǎng)站建設(shè),黃浦網(wǎng)站建設(shè)費(fèi)用合理。
怎么理解這句話,和我們今天講的精度有什么關(guān)系。我們先舉一個例子,方便大家的理解。比如一個圓,對應(yīng)的數(shù)學(xué)形式為:
相信大家都不會否認(rèn)這個公式很優(yōu)雅,真的可以用完美無瑕來形容了?,F(xiàn)在畫出來,去其中的一段圓弧,你就意識到,要達(dá)到形式上的完美,步步維艱。
可見,在現(xiàn)實(shí)生活中不存在絕對的完美,總有更高的標(biāo)準(zhǔn),讓它變得完美。對應(yīng)到數(shù)字上,不完美就是精度的損失。當(dāng)然,這種損失是不可避免的,甚至是有益的,首先,它能降低成本,比如有損壓縮技術(shù)。其次,也有助于我們對事物的理解,比如地球是一個不規(guī)則球體,我們會認(rèn)為它是一個橢球,甚至?xí)M(jìn)一步簡化,認(rèn)為它是一個圓球。
這就有了矛盾點(diǎn),精度損失本來是一件壞事,怎么讓你三言兩語說成了一件好事。問題的癥結(jié)就在于我們對“形式”的理解深度,幫助我們更好的取舍,當(dāng)我們合理的評估這種精度的損失,達(dá)到剛剛好的平衡,也是一種退而求其次的完美。
上一節(jié)我們講了球心坐標(biāo)和本地坐標(biāo)之間的轉(zhuǎn)換,這里也有一個精度的問題。假設(shè)赤道上相距1米的兩個點(diǎn)之間的delta,如果是球心坐標(biāo),我們用經(jīng)緯度來表示的話,地球半徑R為6378137米,兩點(diǎn)之間的經(jīng)度差為x,推算如下。而我們采用以其中一點(diǎn)為原點(diǎn)的本地坐標(biāo)時,兩點(diǎn)之間的差就是1米(b)。
兩個答案哪一個更準(zhǔn)確。分為三種情況,一部分人認(rèn)為答案a詳細(xì)準(zhǔn)確,比如我們在星戰(zhàn)類電影里面都會有一個畫面,艦長說,距離地球還有多遠(yuǎn),總會有一個人說出一串長長的的數(shù)字,讓人覺得準(zhǔn)確無誤;一部分人認(rèn)為答案b簡單準(zhǔn)確;還有一部分人認(rèn)為,兩者一樣準(zhǔn)確。確實(shí),兩個答案都是通過數(shù)學(xué)公式推到出來的,理論上講可以做到一樣準(zhǔn)確,但從程序員的角度,浮點(diǎn)型是有精度損失,這是浮點(diǎn)型的存儲規(guī)范導(dǎo)致的,通常精度能夠滿足多數(shù)需求,但一旦滿足不了,損失是巨大的,而且難發(fā)現(xiàn)難解決。比如哥倫比亞號爆炸,就是因?yàn)閐ouble精度問題導(dǎo)致。
這部分之前做過一個視頻,可以在百度搜索:[編程]1 C++類型簡析,會有詳細(xì)介紹。如果不想花時間,只需要記住,float可以有7位有效數(shù)字,而double可以有16位,選擇合適的浮點(diǎn)類型,當(dāng)你的精度需求超過這個范圍時,你就要小心了。
如果精度達(dá)不到要求,怎么辦?不妨把原點(diǎn)換到一個相對近的位置,這樣就可以大大提高精度。這不就是坐標(biāo)轉(zhuǎn)換的意義嗎?
通常,我們都會有一個基準(zhǔn)點(diǎn),保證它是準(zhǔn)確的,周邊的物體都是相對該基準(zhǔn)點(diǎn)的位置,成為RTC,Relative to centre。但在Virtual Earth中,如果我們近地面瀏覽,RTC-rendering還是會出現(xiàn)瀏覽范圍超過float精度的情況,就會出現(xiàn)精度的丟失,也就是相機(jī)抖動。
這里有兩個步驟,第一將RTC改為RTE(eye),以前以某一個事先約定的中心點(diǎn)為基準(zhǔn)點(diǎn),在瀏覽中,總會出現(xiàn)偏離該點(diǎn)的情況,越遠(yuǎn)精度損失就越大,這時我們改為以相機(jī)位置為中心點(diǎn)有機(jī)會在介紹相關(guān)的推導(dǎo),模型試圖矩陣,法向量等相機(jī)矩陣推導(dǎo)后續(xù)會專門介紹。當(dāng)距離物體非常近時,采用RTE的坐標(biāo)轉(zhuǎn)換會更精確。
同時,因?yàn)閟hader中僅支持float類型,這里,Cesium提供了一種編碼方式,用float-float模擬一個double,來確保精度問題,對應(yīng)EncodedCartesian3.encode方法。這樣,通過一個high的float和一個low的float,分別運(yùn)算,解決抖動的問題,也算是GPU之duoble運(yùn)算的一種思路吧。