2011-03-30 87 views
0


我想虛擬多段線。在我的應用程序中,最多顯示七條多段線,每條多段線擁有多達九百萬點(當然,只有一小部分應該可見)。每條折線都有一個對PointCollection的綁定。所有的多段線都在ScrollViewer控件中,滾動效果是每一個。
現在,我想知道如何虛擬化折線是可能的。我從微軟的Chris Lovett那裏找到一篇關於Virtual Canvas的文章,但我不確定它是否適用於我的問題。有沒有人有過類似的經歷?
在此先感謝。使用多義線的UI虛擬化

回答

0

我遇到了類似的情況,並決定實施虛擬化,如下所示: 我正在處理的數據(多段線的點)處於實際座標中,並且比顯示屏上顯示的要詳細得多。用戶還應該能夠放大並查看更多細節。

  1. 確定世界座標中顯示器上兩個(或三個)像素之間的距離。這使我可以決定是否可以移除折線的一個點,因爲它最終會在與相鄰點相同的像素位置。
  2. 循環點:

    a。如果當前點與前一點位於顯示屏上的相同位置:跳過它。

    b。如果當前點和前兩個點位於一條直線上,則不需要前一個點:移除前一個點,添加當前點(並添加下一個點(D)以防止將緩慢彎曲曲線舍入爲一條直線)。

  3. 使用收集的點來繪製折線

取決於幫我減少原設定回約30%,但是這是完全依賴於數據的數據。無擔保那裏;)

當用戶放大時,我只是重新計算從步驟1開始

我加了很多參數的算法,所以我可以調整和優化它發現性能之間的甜蜜點和圖像質量。例如,我添加了一個epsilon,它允許我指定通過A和C的線和B點之間的距離仍然允許B點在線上。

讓我知道這是否有幫助。

+0

我明白了你的觀點,但恐怕它不適合我的情況,因爲折線不應該可視化對象/圖像。它可以將ECG數據等醫療數據可視化。因此,假設有來自24小時ECG心電圖的數據,我已經減少了數據集。你看,我不需要簡單地在水平/時間方向上垂直滾動。 我認爲最好的方法是將整個數據集的一個子集加載到PointCollection中並按需加載更多的數據。然而,問題是模擬數據將完全存在,即可能發生... – 2011-03-31 07:46:58

+0

啊,是的,你是正確的我的解決方案不會幫助你。在你的情況下,我可能會創建一組固定的點並在滾動時操作它們。這樣你只會改變座標,但不會添加到集合或從集合中刪除,這是一個巨大的節省時間。 – 2011-03-31 08:48:32