首先我們要實現的文字雲效果如下:
由圖可知,該文字雲的效果是,乙個大標籤文字在區域中心,其它小標籤文字圍繞這個大標籤文字。
其中,這些文字有隨機的顏色。
除了大標籤文字,其它標籤文字大小也隨機。
然後,圍繞
這個效果呢,想象一下火影忍者的輪迴眼
。
其實就像一顆小石頭扔向湖面,泛起陣陣漣漪(圓圈)向外擴散。
之後,文字之間不能交叉,也就是說不能碰撞,那就是說不能重疊。
好了,讓我們擼起袖子
由以上的分析,需要擼乙個獲取隨機顏色的值
函式。
function getrandomcolor()
return color;
}
再擼乙個獲取隨機的文字大小
函式。
function getrandomfontsize()
return res[0];
}
以上兩個函式**簡單粗暴,不再說明。
既然最大的標籤文字待在區域中心,那麼獲取區域的中心點座標
函式必不可少。
function getcenterpoint(domelement)
一句話講清,長寬取各一半再加上區域自己的座標即可。
接下來就是圍繞
這個效果對應的函式,
function getpointsatradius(radius, center ,offsety, multiple)
while (t)
return points;
}
初中學的三角函式派上用場,它用來獲取圓上點的橫座標和縱座標。
這裡除了半徑(radius)和圓中心座標(center)兩個必要引數,還加上了y軸偏移(offsety),和單位距離(multiple)引數。
其中y軸偏移(offsety)可用來縮小或擴**取的y座標,從而改變生成的文字雲形狀。
單位距離(multiple)引數,是確定以多少畫素作為乙個半徑單位。
這年代,螢幕解析度都很大,不可能以單個畫素進行畫圈圈吧。
然後我們也沒必要拿到圓上的每個點的座標。
那我們拿圓上多少個座標比較合適?
文字標籤是矩形,乙個矩形可被八個矩形直接包圍。間接包圍n8個矩形。
故取n8個座標即可。
接下來是判斷兩個矩形是否相交
。
function iscorssrect(array1, array2)
首先乙個矩形可由左上角座標和右下角座標來定義。
那麼兩個矩形相交,則表明兩個矩形的左上角座標最大值 要小於等於 兩個矩形的右下角座標最小值。
請看圖想象。
有了以上幾個函式,我們就可以開始構思業務邏輯。
假設輸入的資料是乙個陣列,比如["紅樓夢","賈寶玉","林黛玉","薛寶釵","王熙鳳","李紈","賈元春","賈迎春","賈探春","賈惜春","秦可卿","賈巧姐","史湘雲","妙玉","賈政","賈赦","賈璉","賈珍","賈環","賈母","王夫人","薛姨媽","尤氏","平兒","鴛鴦","襲人","晴雯","香菱","紫鵑","麝月","小紅","金釧","甄士隱","賈雨村"]
。
我們要依次取出乙個詞,並且計算這個詞的寬高。
通過圍繞
函式獲取將要放置的座標。
通過詞的寬高 和 將要放置的座標,可以得到這個詞的左上角座標和右下角座標資訊。
然後跟已畫上去的詞云左上角座標,右下角座標進行比較,看兩個矩形是否相交
。
不相交,則畫上去,並把它的左上角座標,右下角座標資訊進行儲存。
相交,則回到第2步,獲取下乙個將要放置的座標。
具體**如下:
本文實現思路和實驗資料參考了wordcloud2,
並重寫其百分之九十的**。
意在理解其思路。
用python實現乙個簡單的詞云
對於在windows pycharm工具 裡實現乙個簡單的詞云還是經過了幾步小挫折,跟大家分享下,如果遇到類似問題可以參考 1.匯入wordcloud包時候報錯,當然很明顯沒有安裝此包。2.安裝過程中報乙個關於 vc 編譯器的錯誤。3.安裝wordcloud成功後,在pycharm裡面執行from ...
用python實現乙個簡單加密文字的程式
這個加密文字的程式需要以下使用者輸入 1.要加密的文字text 2.正整數prime而有效的prime值包括 1,3,5,7,9,11,15,17,19,21,23,25 3.正整數number和字母移動位置n,其中n由下式給出 primer position of each letter numb...
乙個簡單的Matrix實現
我們直接來看 吧 matrix.h pragma once include using namespace std 矩陣類 class matrix 下面是實現和測試的 matrix.cpp include matrix.h include include matrix matrix void ma...