WPF 餅狀圖,柱形圖,折線圖 (3 餅狀圖)


餅狀圖相對來說復雜一些。因為需要計算很多坐標,線來看下這個列子。

 

 

 

圓首先想到Ellipse。但是Ellipse無法對某部分扇形繪制特別的顏色。所以我們需要更加細致的工具。

 

由列子我們可以想象。該圓由4部分扇形組成。這些扇形的半徑相同。那么我們可以繪制4個扇形,把這些扇形像積木一樣拼裝在一起。那就是一個正圓了。

畫扇形可以用什么那?

需要用到PATH了 ,其中畫圓弧需要用到ArcSegment 。我們想象按照WPF 的坐標體系。構建一個圓的坐標系。我們以 (200,200)為圓心。150為半徑。那么構建出我們的圓

 

 圓上兩點和圓心 確定一段圓弧。上圖扇形中,圓弧的起點是 50,200。終點是200,50 .圓弧占圓的1/4.剛好是90度。坐標比較好算。那么

 

假設我像繪制一個30度的圓弧那?起點仍然是50,200 。終點的坐標是什么? 它如何計算那?。

讓我們回到一個數學問題。坐標50,200.以 坐標 200,200為圓心。順時針旋轉30度以后。得到的坐標是啥?書到用時方恨少了把。線性代數高等數學可以翻出來了

數學上的問題我們不討論。這里直接說一個C# 類Matrix,這個類可以幫我們完成這個旋轉操作,看代碼

            Matrix matrix = new Matrix();
            Point p = new Point(50, 200);
            matrix.RotateAt(30, 200, 200);
            matrix.Translate(50, 0);
            arc.Point = matrix.Transform(p);

  Matrix類簡單點說可以幫我們完成仿射變換。感興趣的自己去學習一下相關概念,  包括 矩陣運算,向量。里面的數學原理我這種學渣就不暴露下限了。

通過計算得到了圓弧的終點坐標后,圓弧就顯示出來啦

 

 。那么,我向再畫一部分。45度的藍色圓弧。相信大家伙也知道怎么畫了,先在XAML加一段PATH

 

 在代碼種生成新加入Path的圓弧的3個點

 

 至此。如何構建一個圓。大伙應該也會了。只要保證所有圓弧的度數加起來=360度。就可以了

同時,在代碼種生成圓弧是比較合理的,這樣不用每次在XAML種加一個PATH。考慮到更加輕量級的實現。 我使用了DrawingVisual來代替Path。但是他們的繪圖原理是完全一樣的

源碼路徑:https://gitee.com/csszbb/wpf_drawing。  若對您有幫助,請幫我點個贊

 


免責聲明!

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



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