談談我對投影的理解


投影的數學意義

Projection_800

A projection is the transformation of points and lines in one plane onto another plane by connecting corresponding points on the two planes with parallel lines.

      投影的概念很簡單,就是投射的影子。好比黑暗屋子有一處光,投到你偉岸的身軀,牆上必然會有影子,這個影子就是你的身體對應這面牆的投影。

1

      如上圖, 求向量y到平面W的最短距離。對於點y,沿着平面W的法線方向(垂直於平面W),和W相交於y’,此時誤差z最小,就是我們要找的答案。因為該射線是垂直於該平面(perpendicular),因此稱為正交(orthogonal)投影。現實生活中,從一大堆統計點中擬合出一條有規律的線,就需要用最小二乘法,其實就是正交投影的思路。對應的數學描述為:當W平面中Ax = y無解時,轉換為Px= y的形式,使其有解。

      當然,這樣做有什么好處?大家對比一下自己的身體和身影的區別,答案就是把三維的問題變成了一個二維的問題,這就是一個降維的思想,也是投影的價值。為了簡化問題,限定在某一范圍內,就要進行必要的降維(消元),如果因此導致問題無解,通過合適的投影矩陣P找到解。

10

投影的現實意義

      各種原因吧,很多時候我們都需要抽象到二維空間,方便理解,降低成本。比如,顯示器明明是平的,如何帶給我們“深度”的錯覺;地球明明是圓的,可地圖看起來是平的。

9

      兩者的區別如上,前者采用了透視投影,眼睛認知世界也是采用該投影方式,因此,我們可以通過“平”幕感覺出深度。而后者采用正交投影,無論遠近大小都一樣。但兩者在數學理論上並無本質區別,都是矩陣P,只是P中的元素不同罷了。

2

      這里主要看氣質,我們並不詳細給出兩個投影矩陣的推導過程, 如上是透視投影的示意圖,視錐體的任意一點(),求出在平面(z = -n)對應的點,就是一個相似三角形的過程。透視投影是一個點光源,而正交投影像一束平行光,但推算過程一致。

timg

      地圖投影也沒有本質區別,如上,在球心處一盞燈,地球投影到這個圓柱體側面,然后展開,形成右圖的效果。

投影的硬件加速

      通過上面的介紹,雖然投影要理解的內容很多,但操作上非常簡單,每個點只需要乘以投影矩陣P,就可以得到投影后的點。

5

      在數值計算上,這有三個特點,第一是簡單,每個點的計算過程都是獨立的,可封閉的,並不和其他相鄰點之間有關聯。其次是粗暴,矩陣運算計算量很大,最后基本都是浮點運算。

      比如動態投影,計算量巨大,特別是B/S應用,受限於客戶端的計算能力,往往都是基於服務端做動態投影計算,然后將結果返回給客戶端。但即使如此,對於C/S而言,動態投影的性能也是瓶頸。

      相比CPU,GPU沒有邏輯單元,且浮點運算能力突出,非常適合用並行的方式來解決這類簡單粗暴的計算密集型問題。

      這是一種很好的解決動態投影的方式,在性能、實時、資源消耗和兼容性上都表現出色。比如墨卡托投影轉WGS,可以錯誤的理解為把圖片1高度不變,長度拉伸2倍的過程。我們完全把投影轉換的計算放到着色器中,通過GPU頂點和片元着色器實現。

8

      從CPU到GPU的轉移,看上去很完美的,但動態投影有一個效果上的問題,畢竟是對紋理的操作,難免會有一些位置上偏移縮放等。如果用肉眼仔細看,你還是會發現不如以前的紋理清晰。

      Cesium在這個問題上有一個很精妙的辦法,還是要進行動態投影的,只是轉換的對象不是Texture,保證紋理信息不變,而是對Texture Coordinate進行轉換。

      如下是動態投影的效果對比。當然受限於現實,目前僅支持墨卡托和WGS之間的轉換,但在理論上,只要是點對點的動態投影都可以采用這種思路,當然最后還得看效果和數據易用性等問題。

dbde7070-80b5-11e6-94b7-5bc044807add


免責聲明!

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



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