工作中需要使用到餅狀圖,在網上找了半天,也沒有找到那種漂亮的3D餅狀圖 的代碼,都是2D的,不喜歡。 無意間,看到有人用.net實現的3D餅狀圖,得到啟 發,干脆自己做一個吧。
其實很簡單,就是用Pie扇形函數分別畫出兩個相同的、上下間距的分割圓。 但是,僅僅這樣還不夠,你看:
(圖一)
圖中方框的部分都是需要修正的。原文的作者是如圖二這樣修正的:
(圖二)
但是,作者也說了,在餅圖比較厚或者分割比較多時,因為角度的關系,還是 會有漏色的現象。通過修改,我使用如圖三的修正方法:
(圖三)
效果不錯。具體是,先繪制下邊一個分割圓,在每一次繪制完一個扇形之後, 就用適當的顏色修補需要遮蓋的地方,因為角度的關系,有些地方不能一次修好 ,後面的扇形又會破懷修過的地方,所以進行了反復的覆蓋,這是最麻煩的一步 。完成之後,就簡單了,再把上面的分割圓畫出來,就像一個蓋子蓋上一樣。當 然,使用的顏色順序要和下面的分割圓一樣。為了使畫出來的圓餅有立體感,我 把顏色分成了兩組,一一對應,色調是一樣的,只是上面一組更亮一些,這樣畫 出來就有立體感了。完成圖:
(圖四)
你也可以使用一組不太亮的顏色,並且調整橢圓的長寬比例,使得立體圖看著 更舒服自然一些,如圖五:
具體過程請看代碼,我都作了詳細的注釋。本代碼在VC6.0、XP操作系統下編 譯通過,運行正常。
最後需要說明的是,本試例代碼為了簡單,只使用了20個元素的顏色數組,這 在分割扇形數等於20時,最後一個仍會漏色,你可以增加顏色數來避免使用中出 現這個問題,也可以通過計算自動生成顏色,從而徹底解決它。
本文配套源碼