2017-02-18 68 views
1

我想「飛行」(3D)弧添加到我的正投影,如圖here,但剪報,而不是淡入淡出效果。這似乎很難,因爲弧線是獨立於投影創建的。開始,結束和大圓中點沿着從畫布的中心的線延伸 - - (每個電弧通過從投影獲得三個點定義但電弧本身是使用在對應的「2D」基數插值繪製)裁剪非突出元件(正投影)

我的第一個想法是,我可能需要做一些球形幾何來獲得剪切發生的座標,但現在我想知道是否有一個更直接的方法來完成這個(我D3是新的)。

這是我的地圖是什麼樣子沒有削波:

enter image description here

回答

0

我也很綠色D3,幸好我也從我自己的搜索爲裁剪飛行一個體面的解決方案新鮮在正字法線。您鏈接到該演示是在很多方面聰明不止一個:

  1. 弧從與在一個Catmull-Rom curve插值三點繪製投射二維座標恰好在3D視覺近似正圓曲線很好地
  2. 線與任其點接近剪取平面變淡,因爲你已經指出

在繪製投影,二維座標花鍵消除了任何選擇在投影之前分割線,讓視覺平滑便宜,即使d3有t他本身就具有功能性(反正我一直無法找到)。這意味着插值必須更加手動。

我首先想到的是,我可能需要做一些球面幾何來獲得,其中剪裁發生的座標,但現在我不知道是否有做到這一點

在一個更簡單的方法

  1. 通過與正常當前全球中心的叉積獲取削波點的座標大圓:最後用什麼,我認爲最明顯的選擇,不幸的是你的目標正是爲了避免結算計劃弧的e。鑑於您的始發地和目的地PoPd分別和全球中心C,你正在尋找C x (Po x Pd)標準化
  2. 插值的始發地和目的地使用類似d3.geoInterpolate
  3. 項目插入點在正確的scale之間的座標(讀:仰角)地面爲飛行線
  4. 從原點到沿之間內插點的削波點繪製一個[平滑]線的那部分,而另一個從削波點到目的地,相應地移動一個以上的背景。觀察整條線位於裁剪平面前方或後方的情況。

要確定飛行路徑中的哪個位置需要拼接您的剪切點,您可能需要將剪切點的較大角度與一端或端對端進行比較。另請注意,性能會受到影響,但您仍然可以對示例中繪製的航班線數量感到滿意。