一種不等高度的三維立體餅圖的繪制方法及系統的制作方法
【專利摘要】本發明涉及一種不等高度的三維立體餅圖的繪制方法及系統,屬于計算機圖像處理【技術領域】。本發明所述方法包括以下步驟:(1)獲取各統計分量的數值,以便確定各餅對象的繪制角度;(2)依據第一步的計算結果,計算每一個餅對象的繪制起始角度、終止角度及高度;(3)找到所有繪制角度范圍跨越90度以及270度的餅對象,用一條垂直分割線將其在90度和270度處分割為兩個餅對象,如果一個餅對象正好結束或者起始于90度或270度,則該對象不必分割;(4)重新調整各個餅對象的繪制順序并進行繪制。采用本發明所述的方法和系統可以方便地實現不等高度的立體三維餅圖的正確繪制,包括處理各個餅之間的壓蓋關系。
【專利說明】一種不等高度的三維立體餅圖的繪制方法及系統
【技術領域】
[0001]本發明屬于計算機圖像處理【技術領域】,具體涉及一種不等高度的三維立體餅圖的繪制方法及系統。
【背景技術】
[0002]通過計算機進行餅圖繪制是很多GIS (地理信息系統,Geographic InformationSystem)軟件及圖表繪制軟件中的常用功能。目前大部分GIS及圖表系統通常提供簡單餅圖、立體餅圖的繪制功能,其通常以角度表示各專題分量的比例關系,如圖1所示。
[0003]無論是簡單餅圖還是立體餅圖,其只能展現一個統計分量,例如每一個地區的鋼產量之間的比例關系。而當存在第二個統計分量需要在餅圖中展現時,傳統的餅圖形式無法將其同時展現出來。此時,我們可以對餅圖中每一部分的采用不同的半徑或不同的高度進行展現,這樣,就可以在一個餅圖中表現更多的統計分量。如圖2所示,圖2顯示了一個不等高度的復雜三維餅圖,其可以表現兩個統計分量的占比情況。
[0004]目前提供這種不等高度的復雜三維餅圖繪制功能的軟件比較少,并且其基于二維繪制API (如Windows⑶I,⑶I+等)繪制過程也非常復雜,不但需要繪制每一個餅的立體效果,還要考慮到各個餅之間的壓蓋關系,確定各個餅的繪制先后順序,并設置正確的繪制裁剪區域。
[0005]在現有的餅圖繪制技術中,已經實現了簡單餅圖(平面餅圖)以及普通立體餅圖的繪制,各種常見的GIS軟件及圖表繪制軟件基本都提供了相關的功能。目前大部分軟件主要基于二維繪制接口(如Windows平臺的⑶I,⑶I+等)實現對餅圖的繪制,其重點是利用繪制API提供的裁剪區功能,在每一個餅對象繪制完成后,修改當前裁剪區。以普通立體餅圖的繪制過程為例,其通常分為以下幾個步驟:
[0006]1.獲取各統計分量的數值
[0007]2.計算各餅應占的角度范圍
[0008]3.繪制每一個餅對象,繪制完成后,根據該餅對象的角度跨度,確定該餅對象不可覆蓋的屏幕區域,并相應修改繪制裁剪區,以便下一個餅對象繪制的時候不會覆蓋此區域。
[0009]在確定裁剪區域時,考慮的主要有餅對象的頂面、外圓側面、內徑側面。由于各個餅對象的高度一致,因此餅的頂面不存在覆蓋的情況,僅需處理外圓側面及內徑側面的覆蓋情況,每一個餅對象繪制時主要考慮其內徑側面是否需要加入到繪制裁剪區即可,處理比較簡單。
[0010]現有的普通三維立體餅圖的繪制方法適用于各個餅對象等高度的情況,此時很容易決定每一個餅對象不可覆蓋的屏幕區域,從而正確設置裁剪區。而當每一個餅高度不等時,此時餅的頂面可能被其它餅對象的頂面或側面遮蓋,而由于每一個餅對象的側面存在部分遮蓋的情況,此時裁剪區的計算非常復雜。以圖3為例:當“I”先繪制時,如果不設置裁剪區,則“2”繪制時會遮蓋“I”所在區域,但如果將“I”的內徑側面加入裁剪區,則“4”繪制時又無法覆蓋“ I ”的底部區域。[0011]此時要正確計算“I”繪制后應扣除的裁剪區域相當困難,因為“3”對象如果角度增大到一定程度后,其同樣會覆蓋“I”的側面區域,如圖4所示。
[0012]此時要正確繪制三維立體餅圖,必須在三維空間中計算對象“I”的不規則裁剪區,而這一過程對于大部分傳統的基于二維繪制接口的程序過于復雜而難以實現。
【發明內容】
[0013]針對現有技術中存在的缺陷,本發明的目的是提供一種簡便易行的不等高度的三維立體餅圖的繪制方法及系統。該方法和系統不必進行三維空間下的裁剪區復雜計算,即可實現任意不等高度立體餅圖的正確繪制。
[0014]為達到以上目的,本發明采用的技術方案是:一種不等高度的三維立體餅圖的繪制方法,包括以下步驟:
[0015](I)獲取各統計分量的數值,以便確定各餅對象的繪制角度;
[0016](2)依據第一步的計算結果,計算每一個餅對象的繪制起始角度、終止角度及高度;
[0017](3)找到所有繪制角度范圍跨越設定角度的餅對象,用一條分割線將其在該角度處分割為兩個餅對象,如果一個餅對象正好結束或者起始于該角度,則該對象不必分割;
[0018](4)重新調整各個餅對象的繪制順序并進行繪制。
[0019]進一步,步驟(3)中,所述的設定角度為90度以及270度,用一條垂直分割線將繪制角度范圍跨越90度和270度的餅對象在90度和270度處分割為兩個餅對象,如果一個餅對象正好結束或者起始于90度或270度,則該對象不必分割。
[0020]進一步,步驟(4)中,重新調整各個餅對象的繪制順序并進行繪制的方法如下:在垂直分割線左右兩側都按照從上到下的順序進行繪制,按照此繪制順序,在繪制的時候無需調整裁剪區。
[0021]一種不等高度的三維立體餅圖的繪制系統,包括以下裝置:。
[0022]各統計分量獲取模塊,用于獲取各統計分量的數值,以便確定各餅對象的繪制角度;
[0023]計算模塊,用于依據第一步的計算結果,計算每一個餅對象的繪制起始角度、終止角度及高度;
[0024]分割模塊,用于找到所有繪制角度范圍跨越設定角度的餅對象,用一條垂直分割線將其在該角度處分割為兩個餅對象,如果一個餅對象正好結束或者起始于該角度,則該對象不必分割;
[0025]繪制模塊,用于重新調整各個餅對象的繪制順序并進行繪制。
[0026]進一步,所述的設定角度為90度以及270度,分割模塊用一條垂直分割線將繪制角度范圍跨越90度和270度的餅對象在90度和270度處分割為兩個餅對象,如果一個餅對象正好結束或者起始于90度或270度,則該對象不必分割。
[0027]進一步,所述的繪制模塊在分割線左右兩側都按照從上到下的順序進行繪制。
[0028]本發明的效果在于:采用本發明所述的方法及系統,大大簡化了不等高度三維立體餅圖的繪制方法,解決了其繪制過程中對各種高度、角度的餅對象之間相互壓蓋導致的裁剪區計算的復雜性。對于目前各種基于二維繪制API技術開發的GIS、圖表制作軟件繪制這種復雜餅圖具有很大幫助。
【專利附圖】
【附圖說明】
[0029]圖1是二維餅圖示例;
[0030]圖2是三維立體餅圖示例一;
[0031]圖3是三維立體餅圖示例二 ;
[0032]圖4是三維立體餅圖示例三;
[0033]圖5是本發明所述一種不等高度的三維立體餅圖的繪制方法的原理圖;
[0034]圖6是本發明所述方法一種【具體實施方式】的流程圖;
[0035]圖7是本發明所述系統的結構圖。
【具體實施方式】
[0036]下面結合附圖和【具體實施方式】對本發明作進一步描述。
[0037]本發明基于二維繪制API,針對這種不等高度的復雜三維餅圖的繪制給出了一種非常簡單的方法,基于此方法可以方便地實現不等高度的立體三維餅圖的正確繪制,包括處理各個餅之間的壓蓋關系。
[0038]通過對不等高度三維立體餅圖中各餅的覆蓋關系進行深入研究,發現如果僅依靠裁剪區實現繪制功能過于復雜,必須對每一個餅的繪制順序進行調整,如此可簡化裁剪區計算的復雜性。但是每一個餅對象其在四個象限分布的情況是任意的,一個餅對象可能跨越一個、兩個甚至三個象限,加上其高度的任意變化影響遮蓋關系,因此要確定餅的正確繪制順序同樣非常復雜。再進一步分析,確定餅對象的繪制順序主要困難在于其跨越象限的問題,而關鍵的跨越象限影響,出現在從第一到第二象限以及從第三象限到第四象限。
[0039]經過研究,本發明提出了不等高度的三維立體餅圖簡要繪制方法,其關鍵思想如圖5所示。
[0040]1.利用一條垂直線,將跨越一、二象限以及跨越三、四象限的餅對象分割為兩半,經過此分割后,每一個餅對象的繪制順序判斷大大簡化;
[0041]2.在垂直分割基礎上,調整餅對象的繪制順序,從而大大簡化繪制裁剪區的計算復雜性。
[0042]如圖6所示,一種不等高度的三維立體餅圖的繪制方法,包括以下步驟:
[0043](I)獲取各統計分量的數值,以便確定各餅對象的繪制角度,見步驟SI ;
[0044](2)依據第一步的計算結果,計算每一個餅對象的繪制起始角度、終止角度及高度,見步驟S2 ;
[0045](3)找到所有繪制角度范圍跨越90度以及270度的餅對象,用一條垂直分割線將其在90度和270度處分割為兩個餅對象,如果一個餅對象正好結束或者起始于90度或270度,則該對象不必分割,見步驟S3 ;
[0046](4)重新調整各個餅對象的繪制順序并進行繪制,見步驟S4。
[0047]本實施例中,在垂直分割線左右兩側都按照從上到下的順序進行繪制,按照此繪制順序,在繪制的時候無需調整裁剪區,因為下面的餅圖對象繪制時會自然覆蓋上面的餅圖對象,而處于上面的餅圖對象不會覆蓋下面的餅圖對象;[0048]a)在垂直分割線右側沿著從上到下(90度到O度再到270度的順序)的順序繪制餅對象;
[0049]b)在垂直分割線左側沿著從上到下(90度到180度再到270度的順序)的順序繪制餅對象。
[0050]本發明給出的不等高度三維立體餅圖繪制一套簡便方法,其中涉及到下面兩個關鍵技術點:
[0051]1、利用一條垂直線,將跨越一、二象限以及跨越三、四象限的餅對象分割為兩半。此步驟非常關鍵,因為經過此分割后,左右兩側餅對象的繪制順序判斷大大簡化,只需從上到下繪制即可。
[0052]2、通過調整餅對象繪制順序,實現后繪制餅對象自動壓蓋先繪制的餅對象,從而簡化繪制時裁剪區的計算。
[0053]要繪制不等高度三維立體餅圖,還有一種方案是基于三維繪制API進行開發,利用DirectX、OpenGL等API進行繪制,由于其可以通過Z緩沖區的判斷正確處理各餅對象的壓蓋關系,因此同樣可解決此問題。但是現有大部分GIS及圖表軟件仍然基于二維技術研發,其短期內無法轉變為純三維軟件,故這些三維繪制技術在這些軟件中難有用武之地。
[0054]如圖7所示,一種不等高度的三維立體餅圖的繪制系統,包括以下模塊:
[0055]各統計分量獲取模塊21,用于獲取各統計分量的數值,以便確定各餅對象的繪制角度;
[0056]計算模塊22,用于依據第一步的計算結果,計算每一個餅對象的繪制起始角度、終止角度及高度;
[0057]分割模塊23,用于找到所有繪制角度范圍跨越90度以及270度的餅對象,用一條垂直分割線將其在90度和270度處分割為兩個餅對象,如果一個餅對象正好結束或者起始于90度或270度,則該對象不必分割;
[0058]繪制模塊24,用于重新調整各個餅對象的繪制順序并進行繪制。
[0059]本實施例中,所述的繪制模塊24在垂直分割線左右兩側都按照從上到下的順序進行繪制,按照此繪制順序,在繪制的時候無需調整裁剪區。
[0060]如【具體實施方式】所述,本發明針對不等高度三維立體餅圖的繪制給出一種簡便的實現方法,基于此方法不必進行三維空間下的裁剪區復雜計算,即可實現任意不等高度立體餅圖效果的正確繪制。
[0061]本發明所述的方法和系統并不限于【具體實施方式】中所述的實施例,本領域技術人員根據本發明的技術方案得出其他的實施方式,同樣屬于本發明的技術創新范圍。
【權利要求】
1.一種不等高度的三維立體餅圖的繪制方法,包括以下步驟: (1)獲取各統計分量的數值,以便確定各餅對象的繪制角度; (2)依據第一步的計算結果,計算每一個餅對象的繪制起始角度、終止角度及高度; (3)找到所有繪制角度范圍跨越設定角度的餅對象,用一條分割線將其在該角度處分割為兩個餅對象,如果一個餅對象正好結束或者起始于該角度,則該對象不必分割; (4)重新調整各個餅對象的繪制順序并進行繪制。
2.如權利要求1所述的一種不等高度的三維立體餅圖的繪制方法,其特征是,步驟(3)中,所述的設定角度為90度以及270度,用一條垂直分割線將繪制角度范圍跨越90度和270度的餅對象在90度和270度處分割為兩個餅對象,如果一個餅對象正好結束或者起始于90度或270度,則該對象不必分割。
3.如權利要求1或2所述的一種不等高度的三維立體餅圖的繪制方法,其特征是,步驟(4)中,重新調整各個餅對象的繪制順序并進行繪制的方法如下: 在分割線左右兩側都按照從上到下的順序進行繪制,按照此繪制順序,在繪制的時候無需調整裁剪區。
4.一種不等高度的三維立體餅圖的繪制系統,包括以下模塊: 各統計分量獲取模塊,用于獲取各統計分量的數值,以便確定各餅對象的繪制角度; 計算模塊,用于依據第一步的計算結果,計算每一個餅對象的繪制起始角度、終止角度及高度; 分割模塊,用于找到所有繪制角度范圍跨越設定角度的餅對象,用一條分割線將其在該角度處分割為兩個餅對象,如果一個餅對象正好結束或者起始于該角度,則該對象不必分割; 繪制模塊,用于重新調整各個餅對象的繪制順序并進行繪制。
5.如權利要求4所述的一種不等高度的三維立體餅圖的繪制系統,其特征在于:所述的設定角度為90度以及270度,分割模塊用一條垂直分割線將繪制角度范圍跨越90度和270度的餅對象在90度和270度處分割為兩個餅對象,如果一個餅對象正好結束或者起始于90度或270度,則該對象不必分割。
6.如權利要求4或5所述的一種不等高度的三維立體餅圖的繪制系統,其特征在于:所述的繪制模塊在分割線左右兩側都按照從上到下的順序進行繪制。
【文檔編號】G06T19/00GK103578139SQ201210250126
【公開日】2014年2月12日 申請日期:2012年7月18日 優先權日:2012年7月18日
【發明者】李欣, 余兵, 鄭佳棟, 蔣孝金, 程永輝 申請人:方正國際軟件(北京)有限公司