2011-12-17 59 views
1

有一段文字(可能很長)。還有一個高度和寬度的容器。如何使文本(全部)適合容器?只能調整字符間距(字距)和字間間距。我真的不在乎文本是否會過於封閉 - 我只是在裏面所有內容。將文本放入容器中

爲了解釋這個問題,我需要一個高效的換行算法,其中成本是線的「包裝性」。

我知道在TeX中使用Knuth-Plass算法,但實現起來有點困難,我甚至不確定它在這種情況下是否可用。我也可以使用遺傳算法,但這可能是一種矯枉過正。

+1

Knuth-Plass專爲您所描述的場景開發,因此應該可以使用。在簡單性方面,總是假設現有的算法是最簡單的,直到你完全理解了這個問題 - 計算機程序中的大部分複雜性都是出於某種原因而引入的。 – thiton 2011-12-17 12:12:47

回答

0

這是一個想法。

首先,估計你想要文本的行數,讓這個數字爲n。然後,假設文本中的字符數爲c,那麼您應該將文本分成多行,使得沒有行包含多於floor(c/n)個字符(您可以貪婪地做到這一點),我們稱之爲cPerLine。 (請注意,您也可以使用動態編程爲較少的「粗糙」(即線段長度之間的差異)執行「文字換行」,詳情請參閱http://en.wikipedia.org/wiki/Word_wrap

假設每個字符的平均寬度(取決於你使用的大小,你可能想要使用一個等寬字體,如Courier New)是w像素。如果容器的寬度爲x,則可以輕鬆計算字符間距:floor(x/cPerline) - w。您還需要考慮行間距,因此如果每個字符的平均高度爲h,並且容器的高度爲y,則類似地,行距應爲floor(y/n) - h

希望這有助於任何方式。