實現乙個簡單的文字雲

2021-09-07 09:28:33 字數 2246 閱讀 9208

首先我們要實現的文字雲效果如下:

由圖可知,該文字雲的效果是,乙個大標籤文字在區域中心,其它小標籤文字圍繞這個大標籤文字。

其中,這些文字有隨機的顏色。

除了大標籤文字,其它標籤文字大小也隨機。

然後,圍繞這個效果呢,想象一下火影忍者的輪迴眼

其實就像一顆小石頭扔向湖面,泛起陣陣漣漪(圓圈)向外擴散。

之後,文字之間不能交叉,也就是說不能碰撞,那就是說不能重疊。

好了,讓我們擼起袖子

由以上的分析,需要擼乙個獲取隨機顏色的值函式。

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...